C++(CPP)中的类与对象(析构,构造,const,static)

深入C++对象模型:构造、拷贝、析构与内存布局全解析 C++对象模型是理解C++底层机制的核心概念,它定义了对象在内存中的布局、生命周期管理及多态实现原理。通过剖析编译器隐式生成的构造函数、拷贝操作与析构函数,开发者可以掌握资源管理、性能优化及避免内存错误的底层逻辑。这一模型的技术价值在于为编写高效、安全的C++代码提供理论基础,尤其在涉及RAII、智能指针及移动语义的现代C++工程实践中至关重要。应用场景包括高性能计算、游戏引擎、系统编程等对内存控制要求严格的领域。本文聚焦于C++对象模型中的构造语意学、拷贝语意学及虚函数表机制,通过分析浅拷贝与深拷贝的陷阱 阅读详情

一、类和对象

  • 类是对象抽象,对象是一个具体实体;

  • 类是一个数据类型(类似于C语言中的结构体,还可以是函数)

  • 对象是通过类这一个数据类型所定义的变量;

  • 类中主要包含两种类型的成员:

    成员变量 -- > 描述的类的属性;

    成员函数 --> 描述的类的行为;

如何去声明一个类:
class 类名     /*类头, class可以用struct替换,成员的默认权限有所不同,*/
类体
{
     属性: 类的成员变量
     行为: 类的成员函数 
};

     注意:对于类的成员的属性主要包含三种:
     private: 私有成员,只能在当前类中可以访问;
     protected:受保护成员,只能在当前类或者派生类中访问;/*派生类的时候,会做介绍*/
     public:公有成员,可以在任意的地方访问    
    

声明一个类的形式:
1. 多个文件:(在实际应用过程中,大多采用此方式实现)
    .h文件做类的声明(成员的声明);
    .cpp文件做成员函数的定义;
2. 一个文件:(针对比较简单的类的时候使用)
    将成员函数在类的内部声明的时候做定义;
    将成员函数在类的外部的做定义,类的内部只需要声明函数就ok;

二、构造与析构函数

  构造函数:

  1.     当声明类的时候,如果没有实现构造函数,系统会执行默认的构造函数;

  2.     构造函数的函数名和类名相同,并且没有返回值的函数是构造函数;

  3.     构造函数的参数可以设计者根据需求自行设计,所以参数可以不同,也就说构造函数        可以重载;

  4.      构造函数的参数可以设计默认参数值;

  5.      构造函数的作用,用于对象的初始化(创建对象的时候,对对象的成员进行初始化的        过程);

  析构函数:

  1.    在声明一个类的时候,如果在类中没有实现析构函数,系统会自动生成一个默认析构       函数;

  2.    所谓的析构函数,是构造函数的反函数,函数名为(~类名),没有返回值也没有参       数的函数;

  3.   析构函数可以由系统自动去执行,也可以由程序显示调用执行;

  4.  析构函数不可以重载,因为析构函数没有参数;

  复制构造函数;

 

三、static 关键字的含义


C语言中:

    1. 修饰局部变量:改变了变量的存储位置和生命周期
    

  •     普通的局部变量:存储位置为栈区,生命周期为局部模块内(模块内程序执行的时候开辟空间,到模块执行结束的时候,释放资源);

  •     static修饰的局部变量:存储位置在静态存储区,生命周期是整个程序执行期间;

    
  2. 修饰全局变量和函数:改变了链接属性(作用域)
        

  •      普通的全局变量或者函数:作用域是整个程序(程序的任意地方都可以链接)

  •     static修饰的全局变量或者函数:作用域在定义的文件中有效,(只能在当前文件中可以链接);

 

 CPP中:
    修饰成员:静态成员,该成员被设置为多个对象共同拥有的成员,不再属于具体的某一个对象;
访问形式:
        
1. 对象.成员;
    
2. 类::成员;

 

四、const关键字
 
在C语言中:
    将变量常量话,也就说用来修饰一个只读变量;

  •     int const *p;               将指针的指向常量化

  •     int *p;                          将指针的指向常量化

  •     int * const p;              将指针的值常量化

  •     const int *const p;     将指针的值和指向常量化

在CPP中

const成员函数:

  •     用const修饰的成员函数, 在成员函数声明和定义的时候,在函数头的后面添加const;

  •     在const成员函数内部,不能直接或者间接的修改对象的值;

  •     在const成员函数内部不能调用非const成员函数,可以调用cosnt成员函数;

  •     const成员函数可以被非const成员函数调用。

 
 const对象:

  •     用const修饰的对象,在创建对象的时候,需要将其进行初始化,后续不能来修改对象的      值;

  •     const对象不能调用非const成员函数,避免间接修改cosnt对象的值;

  •     cosnt对象,只能调用cosnt成员函数;

 const成员变量:

  •     用const修饰的成员变量,在创建对象的时候,需要将对应的const成员变量进行初始           化,后续不能来修改成员变量的值;

  •     onst成员变量初始化的时候,只能通过参数列表传递初始化值;

  •     const成员变量的值,在对象创建后,不能修改其值。

终端以太网接入Internet实验 实验过程: 1.布局 2.连接 3.配置Route0和Route1 4.配置RIP 5.static: 6.查看Route0,Route1的路由表: 7.完成PC2和server0 IP地址,子网掩码和默认网关地址的配置: 8.命令行: 9.启动PC0桌面下的PPPoe宽带连接程序: 10.启动PC1桌面下的PPPoe宽带连接程序: 11.验证PC0和PC2的ICMP报文传输过程 12.验证PC1和server0的ICMP报文传输过程 关键命令说明 阅读详情

相关推荐

马尔可夫网络和贝叶斯网络的一些总结

马尔可夫网络和贝叶斯网络的一些总结 最近学习了一些关于概率逻辑的知识图谱推理方法,主要就是贝叶斯网络和马尔可夫网络,在此总结一下,内容都来自网络资料,这里加入了一下个人的理解,尽量为大家避雷! 这篇文章是我目前在网络上找到的关于贝叶斯网络最清晰的介绍,大家有兴趣可以去看看 贝叶斯网络中比较重要的两部分就是贝叶斯网络的结构和条件概率表。 贝叶斯网络的结构 下面通过一个例子来介绍: 贝叶斯网的网络结...

qq_43654303的博客 4374

cpp——类——析构函数

概述 析构函数特点: 函数名为“~类名”,用来标记和识别析构函数 没有返回值,析构函数是对自身的销毁行为,返回值无意义,因为没有返回值的接收者 形参列表为空,所以析构函数没有重载,唯一的 构造函数VS析构函数: 构造函数是对自身的初始化,生成(定义)对象时自动调用 析构函数是对自身的销毁,销毁对象时自动调用 辅助类 class CAnimal { public: CAnimal() : mGroup(0) { cout << "CAnimal()" << endl;

mardax的专栏 3000

桑基图实战指南:Excel/Python/R三工具高效绘制方法

桑基图是一种以线条宽度编码流量大小、以节点位置表达流程阶段、以连接关系呈现数据流向的专项可视化技术,其核心原理在于‘宽即量、位即序、连即逻辑’。它并非装饰性图表,而是面向业务诊断的分析前置工具,尤其适用于预算分配、能源损耗、用户转化等存在明确单向流动与显著数值差异的场景。相比传统柱状图或漏斗图,桑基图能天然暴露系统瓶颈与隐性损耗,大幅提升决策效率。本文聚焦工程落地,覆盖Excel插件快速交付、Python Plotly交互开发、R networkD3生态集成三大主流路径,兼顾数据准备铁律、索引映射规范与中文

cuml0912的博客 488

C++类中的静态成员变量和静态成员函数的作用

数据成员可以分为静态变量、非静态变量两种。 静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员存在于内存,所以非静态成员可以直接访问类中的静态成员。 非静态成员:所以没有加static的成员都是非静态成员,当类被实例化后,可以通...

afl291529699的博客 994

第3章 信息技术服务(一)

对 第三章 《信息技术服务》中第一、二、三节 <内涵与外延、原理与组成、服务生命周期>进行总结、归纳

好好学习,天天向上的博客 733

混合开关电容DCDC变换器技术解析与工程应用指南

在电源设计领域,传统DCDC变换器在高降压比或高升压比场景下,往往面临占空比过窄、开关应力大、效率偏低等瓶颈。开关电容变换器虽能实现固定比例的电压变换,却受限于调节能力。混合开关电容DCDC变换器通过“开关电容网络粗调变比+电感式DCDC细调输出”的策略,兼顾高效率、高功率密度与宽调压范围。本文梳理了其典型拓扑(如2:1/4:1 SC+Buck)、关键对比、控制策略(含软充电)及工程应用中的常见问题,帮助电源工程师在服务器供电、快充、车载电源等场景下快速选型与调试。

weixin_29164185的博客 313

21. C++外部静态类

在类或者结构体外定义一个静态变量或者静态函数,意味着定义的函数和变量只对它的声明所在的cpp文件(编译单元)是“可见“的。

WX_Chen的博客 1839

AD从原理图到PCB超详细教程

我在学习AD的时候,看了网上很多教程,但是东西很杂,有很多条理不清而且废话很多,所以相信大家学习的时候也是遇到一样的困难。我就特地写一篇帖子,整理了一下AD从画原理图开始一直到画完PCB文件的所有步骤,一方面是供大家参考学习,另一方面可以方便我自己学习记忆更加深刻。我用的版本是AD16中文版,大家用新的版本AD20或者AD22应该操作都是差不多的。

人生寂寞如雪 18万+

C++复习之路:1.Static、const相关:作用,使用场景,struct和class

作用: Static用于定义静态变量,包括全局和局部的静态变量,两者的共同点: 都存储在内存中的静态存储区; 都是整个程序结束后才会被释放,否则一直存在,尤其是多次调用时,新一次的调用的初始值为上一次调用后的结果; 不同点: 全局静态变量作用域为从定义之处到文件结尾,而局部静态变量作用域为定义之处开始到函数结束,但是函数结束后该局部变量在内存中并不会被销毁,等再次调用该函数时可以继续访问。 2.Static用于定义静态函数; 作用于整个.cpp文件中,一般定义于cpp头部; 好处:不同cpp文件中

weixin_42067304的博客 1572

python 编程 安卓脚本_详解基于Android的Appium+Python自动化脚本编写

1.AppiumAppium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。下面开始Appium的配置。appPackage和APPActivity的获取任意下载一个app解压...

weixin_39523625的博客 2928

点云语义分割:RandLANet模型推理C++部署(2)

一、数据读取及预处理 二、模型推理 三、结果保存

zhaoguanhua的博客 3798

C++—19、C++ 中静态存储static

当我们把static.cpp文件里的static去掉。编译运行发现有一个重复定义的变量,如下图:可以看到在linking阶段有个link错误。因为s_Variable已经在另一个编译单元里定义了,所以两个全局变量的名字不能一样。类型特点函数内部静态变量在函数体内,静态变量具有记忆功能,即一个被声明为静态的变量只会被初始化一次,然后在这一函数被调用的过程中其值维持不变文件内静态变量用来限制变量或函数的作用域为当前文件。

Growthofnotes的博客 1176

GEE:耦合5个因子的kRSEI遥感生态指数(K Remote Sensing Ecological Index, KRSEI)计算

本文将介绍在 Google Earth Engine (GEE)平台上,如何耦合5个因子,进行 kRSEI 的计算。具体来说,分别计算了 `NDVI, WET, NDBSI,LST,NDRI` 5个因子,并使用 PCA 主成分分析方法计算了权重,最后,计算了 kRSEI 指数。

养乐多的博客 1415

C++:类和对象全解

本文全面介绍了C++中类和对象的核心概念与使用方式。文章首先从类的定义入手,详细讲解了成员变量(属性)和成员函数(方法)的声明与封装特性,强调了访问修饰符private的作用。然后通过实例化对象的两种方式(普通构造函数和初始化列表),深入分析了对象创建过程的内存分配机制。 在类的补充部分,作者对比了class与struct的默认权限差异,解释了类域的概念及作用域操作符的使用方法,并通过代码示例演示了类大小的计算规则和空类的大小特性。关于this指针,文章剖析了其底层实现原理和在成员函数中的隐式调用机制。 最

2301_81454749的博客 2405

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

cpp类与对象

c++类与对象

w3367738546的博客 1982

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C++】类和对象——Lesson2

运算符重载

小羊的博客 2449

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

const与static的区别

对于C/C++来说,就是只读的意思,只在声明中使用,意即其所修饰的对象为常量((immutable)),它不能被修改,并存放在常量区。一般有两个作用,规定作用域和存储方式(静态存储)。对于局部变量,static规定其为静态存储方式每次调用的初始值为上一次调用后的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见,对于static函数也是如此。static修饰的变量如果没有初始化,则默认为0.

量变产生质变 1万+

C++ 类与对象(最全超详细)

本文系统介绍了C++类与对象的核心知识,包括:1. 基础概念:类定义、封装特性、对象实例化原理、this指针的作用及const成员函数;2. 六大默认成员函数:构造函数(含初始化列表)、析构函数、拷贝构造(区分深浅拷贝)、赋值重载等实现要点;3. 高级特性:static成员、友元机制、内部类、匿名对象及类型转换规则。全文通过Date和Stack类示例,详细解析了面向对象封装特性的实现方法,强调构造函数初始化列表、深拷贝等关键知识点,为后续继承和多态学习奠定基础。建议读者通过实现日期类来巩固所学内容。

我们无法预测机会什么时候降临,所以我们能做的只有努力! 2501

C/C++中const、static与宏定义对比

本文对比分析了C/C++中const、static和#define的特性差异。在C语言中,const仅表示只读变量,不具备编译时常量属性;static控制作用域和生命周期;#define是主要的常量机制。C++中const成为真正的编译时常量,static扩展了类内支持,#define主要用于宏替换。关键区别包括:C++的const默认内部链接、可作编译期常量,而C语言不具备这些特性;C++的static支持类成员。现代C++建议用const/constexpr替代宏,利用static管理类共享数据

弘羽 1310

C++面向对象编程:从类与对象到static、const关键字深度解析

面向对象编程(OOP)是一种将数据与操作数据的方法捆绑在一起的编程范式,其核心思想是通过封装、继承和多态来构建模块化、可复用的代码。在C++中,类作为对象的蓝图,定义了数据成员和成员函数,而对象则是类的具体实例,拥有独立的状态。通过public和private关键字实现封装,可以保护数据完整性并隐藏实现细节,这是OOP的重要特性之一。static关键字用于定义属于类本身的成员,而非某个特定对象,常用于实现对象计数器或共享数据。const关键字则用于保证数据或函数的不变性,提升代码的健壮性和可读性。这些概念共

weixin_34033624的博客 483

【C++】类和对象中的static和const

文章讲了一下static和const两个关键字在类和对象中的使用,文章不长,内容也很简单。

Ye_Ming_OUC的博客 1522

C++中的const static this

前面我们说到了C++中的类创建,其中类包括了函数,变量,以及构造函数,但是和C语言当中一样,我们对变量和函数有const和static修饰,在C语言当中我们用const修饰变量表示不可修改的变量,那么在C++中是不是也是这样呢?明确告诉大家,有共同点也有不同点,大多是不同的

2301_78622258的博客 1385

day5 C++ 类中的const static

day5 了解类中的const static const 1、const修饰数据成员 与类外部数据一致,即认为此数据成员不可改变。 在参数列表(构造函数)位置初始化

filan的博客 2563

Cpp-类和对象

title: 类和对象 date: 2019-03-15 14:05:24 tags: Cpp categories: Cpp 类的引入 万物皆对象。类是一种用户自定义的数据类型,包括表示属性的成员变量和表示行为的成员函数,类是现实世界对象的抽象,对象是类虚拟世界的实例。 C++ 中 struct 中不仅可以有变量,还可以有函数。 类定义结束时后面分号。 成员函数声明和定义可以全部...

ahojcn 的博客 1896

C++ 虚析构virtual、static关键字、const关键字

文章目录 一.虚析构 1.写法 : 2.什么时候用到虚析构 二.c++ static关键字作用 1.static 特点 : 2.static修饰成员属性 3.static 修饰成员方法 三. c++ const关键字作用 1.const 修饰成员属性 2.const 修饰的成员方法 3.const修饰成员方法 C语言const与C++const不同点

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 704

C++学习:类和对象

在C++中struct与class都可以用来表示类,但在C++中还是以class为标准为好,至于为什么别急,下面会提到。//在C++中并不推荐//存放成员变量以及成员函数的类体//后面的分号记住一定不能丢//存放成员变量以及成员函数//后面的分号记住一定不能丢看上去定义的操作基本差不多,但其实他们还是有一定的差别的,下面就让我们用一些例子来给大家演示一下,以更好的理解它们的区别,这里我们将函数在类中的声明与函数的定义分开,再进行相关的操作:Strack.h:我们在该文件中声明函数。

m0_73984165的博客 1018
上一篇: 免费PPT模板下载(毕业设计答辩,毕业设计开题答辩)
下一篇: Linux内核原码下载(官网地址,对各个模块做了相应的解释)
JIANXIN.Y
博客等级 码龄9年 273粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值