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

目录

类&对象的概念

类的内容

对象的创建

● 栈内存对象

● 堆内存对象

封装


类&对象的概念

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

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

对象:根据类的概念所创造的实体(比如: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; //可以使用预留的接口访问 
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始如何学习人工智能?

说说我自己的情况&#xff1a;我接触AI的时候&#xff0c;是在研一。那个时候AlphaGo战胜围棋世界冠军李世石是大新闻&#xff0c;人工智能第一次出现我面前&#xff0c;当时就想搞清楚背后的原理以及这些技术有什么作用。 就开始找资料&#xff0c;看视频。随着了解的深入&am…

第 三 方 组 件 e l e m e n t - u i[Vue]

一、组件之间的传值 组件可以由内部的Data提供数据&#xff0c;也可以由父组件通过prop的方式传值。 兄弟组件之间可以通过Vuex等统一数据源提供数据共享 第一种 Movie.vue <template><div><h1>我才不要和你做朋友</h1></div></template&…

怎么为自己的VPS选择合适的CPU和RAM?

为网站选择VPS&#xff08;虚拟专用服务器&#xff09;与为家庭或办公室选择台式机或笔记本电脑没有什么不同。基本上&#xff0c;您要做的就是查看硬件配置并比较功能和价格。 然而&#xff0c;虽然您可能对个人计算机所需的资源类型有一个粗略的估计&#xff0c;但为服务器获…

API接口测试要注意什么?API接口如何开发?

API接口怎么保证数据安全&#xff1f;如何安全调用邮件API接口&#xff1f; API接口不仅能够确保系统的稳定性和可靠性&#xff0c;还能提高开发效率和用户满意度。然而&#xff0c;要进行有效的API接口测试&#xff0c;需要注意多个方面。AokSend将介绍一些关键点&#xff0c…

全面赋能,永久免费!讯飞星火API能力正式免费开放

2023年5月&#xff0c;讯飞星火正式发布&#xff0c;迅速成为千万用户获取知识、学习知识的“超级助手”&#xff0c;成为解放生产力、释放想象力的“超级杠杆”。 2024年5月&#xff0c;讯飞星火API能力正式免费开放&#xff0c;携手生态开发者加快大模型赋能刚需场景。 领…

【软件工程】【22.10】p1

关键字&#xff1a; 软件需求分类、性能需求、数据流图加工、用例关系、捕获系统功能用例、RUP设计层术语、故障、调试、集成测试、需求分析过程、CMMI实践部件、CMMI能力等级 软件需求规约基本性质、模块控制、协作、UML结点、事件、RUP体系结构、RUP移交、静态评估技术、测…

Java共享台球室无人系统支持微信小程序+微信公众号

共享台球室无人系统 &#x1f3b1; 创新台球体验 近年来&#xff0c;共享经济如火如荼&#xff0c;从共享单车到共享汽车&#xff0c;无一不改变着我们的生活方式。而如今&#xff0c;这一模式已经渗透到了更多领域&#xff0c;共享台球室便是其中之一。不同于传统的台球室&a…

DOPE-FITC在细胞定位、动态追踪等方面的应用-星戈瑞

DOPE-FITC作为一种荧光标记磷脂&#xff0c;在细胞生物学研究中发挥着科研作用。其荧光特性和与细胞膜的亲和性&#xff0c;使其成为细胞定位、动态追踪等方面的工具。 细胞定位 DOPE-FITC能够有效地标记细胞膜&#xff0c;使得细胞膜在荧光显微镜下呈现出明亮的绿色荧光。这种…

triton矩阵乘以及缓存优化

这里triton.cdiv(M, META[BLOCK_SIZE_M]) * triton.cdiv(N, META[BLOCK_SIZE_N])&#xff0c;所以grid的形状是一维的。 观察函数内部 pid tl.program_id(axis0)&#xff0c;因为grid是一维的&#xff0c;所以这里就是总块数&#xff0c;我们假设实际A*BC&#xff0c; A&…

ubuntu链接mysql

C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…

跟着ChatGPT4o学全栈,我看到未来“学习”的模样

引言 大模型是否会取代人类&#xff0c;以及它将取代哪些工作&#xff0c;这或许是许多人焦虑的问题。对此&#xff0c;众说纷纭&#xff0c;网络上各种观点层出不穷。虽然这些问题对未来的重要性不容忽视&#xff0c;但它们对于当下的我们缺少实际的指导意义。因此&#xff0…

SpringMVC系列十一: 文件上传与自定义拦截器

文章目录 SpringMVC文件上传基本介绍需求分析 / 图解应用实例-代码实现 自定义拦截器什么是拦截器自定义拦截器执行流程分析图自定义拦截器应用实例快速入门注意事项和细节Debug执行流程 多个拦截器多个拦截器执行流程示意图应用实例1代码实现注意事项和细节 应用实例2 作业布置…

[创业之路-118] :制造业企业的必备管理神器-ERP-制造业的基本方程式与ERP的发展历程,哪些企业需要ERP?

目录 一、制造业的基本方程式 1.1 基本方程式 1.2 制造的数学模型 二、ERP的发展历程 2.1 发展历程 2.2 比较 三、过往产品回顾 3.1 定货点法 3.2 时段式ERP 3.3 闭环式MRP 3.4 ERP 四、哪些企业需要ERP 4.1 概述 4.2 软件企业需要ERP吗&#xff1f; 一、制造业的…

【计算机网络篇】数据链路层(6)共享式以太网_网络适配器_MAC地址

文章目录 &#x1f354;网络适配器&#x1f354;MAC地址&#x1f5d2;️IEEE 802局域网的MAC地址格式&#x1f4d2;IEEE 802局域网的MAC地址发送顺序&#x1f95a;单播MAC地址&#x1f95a;广播MAC地址&#x1f95a;多播MAC地址&#x1f50e;小结 &#x1f354;网络适配器 要将…

汇川h3U用modbus配置扩展IO

扩展IO模块为4个艾莫迅RTU简易版&#xff0c;16输入&#xff0c;16输出。物理连接为RS485&#xff0c;A B两根线。 下面为H3Umodbus配置&#xff0c;关键是协议选择为&#xff1a;MODBUS主站配置。协议配置&#xff1a;和从站保持一致 通过下图的程序及配置&#xff0c;已经可…

VB打开word文档

在编码之前&#xff0c;先安装Microsoft.Office.Interop.Word Imports Microsoft.Office.InteropModule Module1Sub Main() 创建Word应用程序实例Dim wordApp As New Word.Application() 设置为可见wordApp.Visible True 打开指定的Word文档Dim doc As Word.Document wordA…

期货分仓软件的搭建流程

期货分仓软件的搭建流程&#xff0c;是一个涉及多个环节的复杂过程。首先&#xff0c;明确功能需求是至关重要的&#xff0c;这有助于更好地规划软件的开发和设计。接下来&#xff0c;技术选型是关键一步&#xff0c;需要根据开发经验和项目需求&#xff0c;选择适合的编程语言…

maven archetype项目构架

1、设置环境变量 set MAVEN_HOMED:\SF\java\apache-maven-3.6.3 set path%path%;%MAVEN_HOME%\bin;2、制作archetype mvn -s "D:\SF\java\apache-maven-3.6.3\conf\settings.xml" archetype:create-from-project -DpackageNamecom.demo.esb-s:指定maven的setting文…

华为---VLAN-配置Eth-Trunk链路聚合(三)

6.3 配置Eth-Trunk链路聚合 6.3.1 原理概述 在没有使用Eth-Trunk前&#xff0c;百兆以太网的双绞线在两个互连的网络设备间的带宽仅为100Mbit/s。若想达到更高的数据传输速率&#xff0c;则需要更换传输媒介&#xff0c;使用千兆光纤或升级成为千兆以太网。这样的解决方案成本…

肩背筋膜炎怎么治疗最有效

肩背筋膜炎是一种常见的肌肉骨骼疾病&#xff0c;其症状主要包括&#xff1a;肩背区域疼痛&#xff1a;由于筋膜组织受到损伤&#xff0c;肩背部位会出现明显的疼痛&#xff0c;疼痛可能会放射到周围的其他部位&#xff0c;严重时会影响睡眠和休息。肌肉紧张和僵硬&#xff1a;…