从0开始C++(二):类、对象、封装

news2024/11/25 8:20:56

目录

类&对象的概念

类的内容

对象的创建

● 栈内存对象

● 堆内存对象

封装


类&对象的概念

 类和对象是一个比较抽象的概念,这里直接用一个实例方便理解。

类:类是一个抽象的概念,用来描述同一类对象的特点(比如:颜色、尺寸、价格、速度)

对象:根据类的概念所创造的实体(比如:xiaomi su7)

类的内容

类中最基础的内容包括两个部分,一个是属性,一个是行为。
● 属性:表示一些特征项的数值,比如说:颜色、型号、速度等等。而这些特征项的数值,也被称为”成员变量“。属性一般以名词存在。

● 行为:表示能执行的动作,能干什么事情?比如说:跑赛道、接入米家生态等。也被称为”成员函数“。行为一般以动词存在。

class Car
{
public: // 权限:最开放的权限
    string brand;   // 品牌
    string modle;   // 型号
    int weight;     // 重量
};

对象的创建

C++中存在两种类型的对象,栈内存对象和堆内存对象

● 栈内存对象

        栈内存对象的生命周期与函数的生命周期相同。这些对象存储在栈内存中,一般称为局部对象。

        当函数被调用时,会在栈内存上为函数的局部变量和对象分配内存空间。这些对象在函数执行期间可见且可用,一旦函数执行完毕,栈内存会被释放,这些对象也会随之被销毁

        对于栈内存对象,它们的创建和销毁是自动进行的,无需手动管理内存。这是由编译器自动完成的,称为栈上的自动变量。当函数被调用时,编译器会为每个局部变量和对象分配所需的内存空间,并在函数返回后释放这些内存空间。

优缺点:

        栈内存对象的优点是速度快、创建和销毁方便。然而,栈内存是有限的,其大小通常受到限制。如果函数中创建的局部变量和对象过多或占用过多的内存空间,可能会导致栈溢出的问题。因此,对于较大的对象或需要长时间存在的对象,更适合使用堆内存来进行动态分配和管理。

 创建方法:

类名 对象名;

class Car
{
public: // 权限:最开放的权限
    string brand;   // 品牌
    string modle;   // 型号
    int weight;     // 重量
};
int main()
{
    Car myCar; //  创建栈内存对象
}

● 堆内存对象

        堆内存对象是指在堆内存中动态分配的对象。与栈内存对象不同,堆内存对象的生命周期不受函数的调用和返回影响,它们可以在程序的任意位置创建和销毁。

        堆内存对象的创建需要使用特定的函数,如C++中的new运算符或malloc函数。这些函数在堆内存中分配一块指定大小的内存空间,并返回指向该内存空间的指针。通过指针,可以访问和操作堆内存对象。

        与栈内存对象不同,堆内存对象的销毁需要手动释放。在使用完堆内存对象后,需要使用特定的函数,如C++中的delete运算符或free函数,释放所占用的内存空间。如果不释放堆内存对象,就会造成内存泄漏,导致程序的内存消耗增加并可能导致程序崩溃。

优缺点:     

        堆内存对象的优点是灵活性和可控性。由于动态分配,堆内存对象的大小可以在运行时确定,而不受编译时的限制。此外,堆内存对象的生命周期可以由程序员控制,可以创建和销毁多次,可以在不同作用域中访问。但需要注意的是,堆内存的分配和释放操作相对比较耗时,也容易产生内存泄漏或悬空指针等问题,因此需要谨慎使用和管理。

创建方法

类名 *指针名 = new 类名

销毁:

delete 指针名;

class Car
{
public: // 权限:最开放的权限
    string brand;   // 品牌
    string modle;   // 型号
    int weight;     // 重量
    
};
int main()
{
    Car *myCar = new Car; //  创建堆内存对象
    detele myCar; //释放空间
}

封装

在前面创建的普通类Car与结构体差别不大,实际上可以认为结构体就是一种完全开放的类。

封装指的是,将类的一些属性使用 private 进行私有化,并重新提供外部访问接口。私有化的成员只能在类内访问,封装可以提升代码的安全性,并且可以让程序员更关注上层架构而非内部细节。

class Car
{
private://权限:最私有的权限
    string brand;   // 品牌
    string modle;   // 型号
    int weight;     // 重量
public: // 权限:最开放的权限
    string get_brand()   //外部函数接口
    {
        return brand;
    }
    string get_modle()
    {
        return modle;
    }
    int get_weight()
    {
        return weight;
    } 
};
int main()
{
    Car *myCar = new Car; //  创建堆内存对象
    //cout << Car.brand << endl;  //错误,brand是私有成员 不能外部访问
    cont << Car.get_brand << endl; //可以使用预留的接口访问 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1840035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深圳中小企业融资攻略,贷款方法大盘点!

中小企业融资这事&#xff0c;可不是一个简单的事情。资金对中小企业来说&#xff0c;就像血液对人体一样重要。企业发展离不开资金支持&#xff0c;特别是在今年这个环境下&#xff0c;政策对中小企业还挺友好的。今天讲解一下中小微企业常用的几种贷款方法。希望能让大家更明…

Weaver E-Office v9.5 文件上传漏洞(CVE-2023-2648)

前言 CVE-2023-2648 是一个在 Weaver E-Office 9.5 版本中发现的严重漏洞。此漏洞位于文件 /inc/jquery/uploadify/uploadify.php 中&#xff0c;通过操控 Filedata 参数&#xff0c;可以进行不受限制的文件上传。这一漏洞允许攻击者上传可能包含危险类型的文件&#xff0c;并…

reason: the Java file contained parse errors

今天用Maven打包项目时发生一个错误&#xff1a; file: D:\workspace\echoo2.0-xxx-xxx-portal\src\main\java\com\echoo\service\impl\DecDataServiceImpl.java; reason: the Java file contained parse errors 打包报错显示这个类解析错误 在IDEA中没有任何错误提示 问题所…

​海康威视 isecure center 综合安防管理平台任意文件上传漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复方案 前言 海康威视是以视频为核心的智能物联网解决方案和大数据服务提供商,业务聚焦于综合安防、大数据服务和智慧业务。 海康威视其产品包括摄像机、多屏控制器、交通产品、传输产品、存储产品、门禁产品、消…

[Linux] 文件/目录命令

pwd print working directory cd change directory cd #返回主目录 cd ..返回上级目录 cd . 不动 cd ~ 用户名 进入某用户的主目录 mkdir mkdir 目录名 mkdir -p xx/yy/zz #一次创建多重目录 rmdir remove directory 删除空目录&#xff0c;只能删除空目录&#xff0c;别的不能…

嵌入式开发十八:USART串口通信实验

上一节我们学习了串口通信的基本理论&#xff0c;串口通信是学习单片机的一个重要的一步&#xff0c;非常重要&#xff0c;这一节我们通过实验来学习串口通信的使用&#xff0c;以及串口的接收中断的使用。 一、发送单个字节uint8_t数据或者字符型数据 实现的功能&#xff1a;…

DETR开篇之作

1. 论文背景和动机 背景&#xff1a; 传统的物体检测方法&#xff08;如Faster R-CNN等&#xff09;通常依赖复杂的多阶段 pipeline&#xff0c;包括区域候选生成、特征提取和后处理步骤。这些方法尽管有效&#xff0c;但复杂度高且难以端到端训练。 动机&#xff1a; DETR的提…

利用 Qwen-VL 进行私有化部署第一个 AI 多模态大模型

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

shell脚本之数组及冒泡排序

1.数组定义&#xff1a;在集合当中指定多个元素&#xff0c;元素的类型可以是整数、字符串及浮点。 2.数组作用&#xff1a;一次性的定义多个元素&#xff0c;可以为变量赋值提供便利。 3.数组的定义方法&#xff1a; 数组名&#xff08;a b c d&#xff09; 数组名不能重复…

xss一些笔记

&#xff08;乱写的一些笔记&#xff09; innerHTML只防script像是img就不会防 innerText都防 上面代码执行避免用户交互 js也可以用’‘执行 例子 alert’1‘ document.location.hash // #号后的部分&#xff0c;包括#号 document.location.host // 域名…

可视化表单拖拽生成器优势多 助力流程化办公!

当前&#xff0c;很多企业需要实现流程化办公&#xff0c;进入数字化转型时期。要想实现这一目标&#xff0c;就需要借助更优质的平台产品。低代码技术平台是得到企业喜爱的发展平台&#xff0c;拥有可视化操作、灵活、高效、更可靠等优势特点&#xff0c;在推动企业实现流程化…

RK3588 代码中导入torch报错

RK3588 代码中导入torch报错 使用RK3588测试官方的YOLOv8,出现下面的问题 发现是dfl函数中导入torch的时候产生的&#xff0c;但是我在python终端上执行导入torch并没有发生报错 Traceback (most recent call last):File "infer.py", line 243, in <module>b…

[吃瓜教程]概览西瓜书+南瓜书第1、2章

第一章 绪论 1.1机器学习的定义,什么是机器学习&#xff1f; 1&#xff09;机器学习是这样一门学科&#xff0c;它致力于研究如何通过计算的手段&#xff0c;利用经验来改善系统自身的性能。 2&#xff09;机器学习所研究的主要内容是关于在计算机上从数据中产生模型的算法&a…

信息学奥赛初赛天天练-29-CSP-J2022阅读程序-掌握递归、递推、动态规划、二分与极值函数应用

PDF文档公众号回复关键字:20240619 2022 CSP-J 阅读程序2 阅读程序(判断题1.5分 选择题3分 共计40分 ) 01 #include <algorithm> 02 #include <iostream> 03 #include <limits> 04 05 using namespace std; 06 07 const int MAXN 105; 08 const int MAX…

LMStudio下载模型

笔者在使用LMStudio时下载模型报超时&#xff0c;科学上网也无法解决。&#xff08;LMStudio下载模型时直接走的网关&#xff0c;没有走代理&#xff09; 解决办法如下: 1. 安装软路由并科学上网。 2. 手动下载模型&#xff0c;由于LMStudio解析模型时具有特定的要求&#x…

C++ 79 之 自己写异常类

#include <iostream> #include <string> using namespace std;class MyOutOfRange : public exception{ // 选中exception右键 转到定义 复制一份 virtual const char* what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW 进行函数重写 public: string m_msg;M…

SpringCloud Netflix和SpringCloud Alibaba核心组件

1.SpringCloud Netflix组件 1.1 Netflix Eureka-服务注册发现 Eureka 是一种用于服务发现 的组件&#xff0c;它是一个基于 REST 的服务&#xff0c;用于定位运行在 AWS 弹性计算云&#xff08;EC2&#xff09;中的中间层服务&#xff0c;以便它们可以相互通讯。 注册&#xf…

移植案例与原理 - HDF驱动框架-驱动配置(2)

1.2.7 节点复制 节点复制可以实现在节点定义时从另一个节点先复制内容&#xff0c;用于定义内容相似的节点。语法如下&#xff0c;表示在定义"node"节点时将另一个节点"source_node"的属性复制过来。 node : source_node示例如下&#xff0c;编译后bar节点…

实现跑马灯

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 跑马灯 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Color[] colors { Color.Red, Color.Green, Color.Yellow };T…

IO流2.

字符流-->字符流的底层其实就是字节流 public class Stream {public static void main(String[] args) throws IOException {//1.创建对象并关联本地文件FileReader frnew FileReader("abc\\a.txt");//2.读取资源read()int ch;while((chfr.read())!-1){System.out…