-
1.c++类里默认生成的成员函数(特性:用户没有定义,编译器自动生成)
- 构造函数:
- 1. 函数名与类名相同。
- 2. 无返回值。
- 3. 对象实例化时编译器自动调用对应的构造函数。
- 4. 构造函数可以重载。
- 5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成.
- 6.用户自定义的构造函数可以有参数也可以没有参数,无参的构造函数和全缺省的构造函数都称为默认构造函数(编译器自己能调用),并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写,编译器默认生成的构造函数,都可以认为是默认成员函数。
- 构造函数{...}里的叫赋值,不是初始化,初始话格式:例如Date (int year,int month,int day):_year(year),_month(month),_day(day){...}这个是在没进入构造函数之前完成的,(初始化格式如果不写,编译器自己会加上)
- 普通类型的成员变量出不初始化都无所谓,但是引用,const,其他自定义类型(该类没有默认构造函数)必须初始化.为什么自定义类型没有默认构造函数就必须初始化呢?因为,自定义的构造函数如果不是全缺省的,编译器调不出来,编译器只会掉没有参数的构造函数,全缺省的函数即使调用的时候不加参数,编译器也能调...不是全缺省的就得根据自己写的构造函数自己传值,要自己传值,所以编译器掉不了,得自己调.
- 单参的构造函数
- 成员有多个,但是构造函数的参数只有一个例如Date(int year),导致Date d=2022;这个语句与单参的构造函数配合就是对的,过程:2022调用单参的构造函数,数字转成了临时对象,拷贝给d,考完就析构...这个可读性不高,不建议,用explicit修饰构造函数,构造函数就没有转化的能力了,上述的操作就会报错
- 析构函数
- 析构函数也是由编译器自己调用,用来销毁对象.
- 析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作,例如释放内存等等.
- 1. 析构函数名是在类名前加上字符 ~。
- 2. 无参数无返回值。
- 3. 一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。
- 4. 对象生命周期结束时,C++编译系统系统自动调用析构函数
- 注意:如果类里没有动态开辟的资源,编译器自动调用自己生成的析构函数即可,如果类里有动态开辟的一些资源,那么需要程序员手动生成析构函数,由编译器调用.类里由资源管理的情况如果不手动析构会造成内存泄漏
- 先创建的后析构
- 拷贝构造函数 例:Date(const Date&d)(拷贝构造也属于构造,也有初始化列表)
- 1. 拷贝构造函数是构造函数的一个重载形式。
- 2. 拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用。
- 3. 若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝,或者值拷贝。
- 浅拷贝:对于类成员里只有int ,char,double,等类型的数据,编译器生成的拷贝构造函数或者自己写的函数不存在问题(也就是上述说的浅拷贝),但是如果类成员里有指针类型的成员,经过拷贝构造函数之后,两个对象里的指针就指向了同一块内存空间.这个没有问题,但是,如果在最后调用了析构函数,当释放了一个对象里的指针之后,另一个对象里的指针就指向了一块非法空间,这个对象销毁时再释放这个指针就会出错.(对于这类问题需要)
- 拷贝构造函数的参数一定要是引用的形式,如果以值传递,就会无限拷贝下去.类里的传参如果是以值的形式传,会由实参到形参的一次拷贝,返回一个对象,也会调用一次拷贝构造.
- 赋值运算符重载
- 赋值运算符重载的统一格式 " (返回值) operator+[要重载的运算符](参数)"(加返回值是为了能够满足连续赋值)
- 一个类如果没有显式定义赋值运算符重载,编译器也会生成一个,完成对象按字节序的值拷贝。
- 赋值运算符重载编译器生成的同样也是浅拷贝,不能解决拷贝指针引发的问题..
- 赋值运算符必须重载成成员函数,如果不是在类里生成的,那么编译器会给类生成一个默认的函数,两个就冲突了
- 构造函数:
-
2.类里的注意事项
- const
- const修饰的对象是不能被改变的,任何时候都不能修改,但是要拿对象调用类里函数,如果在函数里修改了const修饰的对象就不满足语法,为了安全起见,定义专门为const类型对象服务的函数.在函数定义后面加const,这样更安全.
- 全局变量可以计数,但是不安全,选择用static修饰得静态成员变量
- static 在类里创建的变量是静态变量不属于某一个对象,static在类里创建的函数也不属于某一个对象,这个函数是没有this指针的,所以可以不用通过对象.函数名/变量名的方式进行访问.通过 类名:: 访问
- 静态成员变量的建立,注意:定义要加上作用域限定.在类外初始化..因为_count还是私有的所有要建立一个静态成员函数用来获取_count的值

- 注意:静态成员变量不能在构造函数里赋值和初始化,这个变量不属于某一个对象

- 获取静态成员变量得值可以用静态成员函数,Date::(函数名)或者d.(函数名)也可以不用静态成员函数,用普通的类里的函数,只能用d.(函数名)...
- 静态成员变量的建立,注意:定义要加上作用域限定.在类外初始化..因为_count还是私有的所有要建立一个静态成员函数用来获取_count的值
- 赋值运算符和拷贝构造的区别:例如Date d1(d2),Dat2 d1=d2,这俩都是拷贝,因为d1还没有创建成功,所以是拷贝构造,赋值就是两个都已经创建成功了
- 被mutable修饰的成员变量.即使对象被const修饰,这个成员变量也能改变
- <<运算符重载,必须在类外重载.应用:在main函数里直接调用cout打印成员变量,不需要调用类对象里的打印函数
- 不是类里的函数,不能在类外访问类里的私有的成员变量,所以有了友元函数,在类里把这个函数声明一下就行了

- 不是类里的函数,不能在类外访问类里的私有的成员变量,所以有了友元函数,在类里把这个函数声明一下就行了
相关推荐
嵌入式设备的switch 以及PHY 芯片调试和选型 (1)
越来越的设备需要多网口的需求,于是需求搭配一个交换机实现网口的扩展。但是很多软件或是硬件工程师在实际选型和应用中经常会遇到一些问题。这里总结一下,避免大家采坑。 几个概念: MAC(介质访问控制),可以理解成数据链路层即可 PHY(物理性),简单理解层转成物理层的连接组件即可 控制接口(MDC/DMIO,I2C,...
构造函数与类名相同:构造函数的函数名必须与类名完全相同,没有返回类型(包括void)
这是因为构造函数在创建对象时自动调用,并且它的任务是初始化对象的成员变量,而不是返回一个值。因此,构造函数不需要显式声明返回类型,编译器会将其隐式地视为与类名相同的无返回类型。具体来说,构造函数的名称必须与包含它的类的名称完全匹配,包括大小写。总结来说,构造函数的函数名必须与类名完全相同,并且没有返回类型(包括void)。这样的规则使编译器能够识别构造函数并将其与相应的类关联起来,以在对象创建时进行初始化。的对象时,构造函数会自动调用,并执行其中的初始化操作。的类,并在该类中定义了一个构造函数。
ACL访问控制列表详解:原理、配置与应用
如果发现ACL规则没有达到预期效果,需要检查ACL规则配置是否正确,是否在正确的接口和方向上应用,以及规则顺序是否合理(ACL规则按顺序匹配,匹配到即停止)。其中,rule-id是规则的编号,用于确定规则的匹配顺序;例如,应该先配置针对特定主机和特定端口的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作,避免因规则顺序不当导致的访问控制失效。例如,应该先配置针对特定主机的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作。
C++:对象的初始化和构造函数
对象的初始化和构造函数 构造函数:是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。构造函数 的名字必须与类名相同,它不要用户来调用,而是在建立对象时自动执行的 形式一: 类名 对象名(实参表); 例如: class Complex{ private: double real; ...
Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】
一直都是报 【ECharts Unknown series wordCloud】这玩意可能要刷脸,祝你好运吧~
重带电粒子的能量歧离(energy straggling)
能量歧离,Bethe-Bloch
c++构造函数
构造函数是怎样的 函数名和类名相同 Student(){ } //默认构造函数 没有返回值 void print(); //这个函数有返回值,返回值是void,无返回值: 没有(void)这个类型 如果不写构造函数,任何类中都存在一个默认的构造函数(可以构造对象的原因) 默认的构造函数是无参的 当我们自己写了构造函数,默认的构造函数就不存在了--->不能构建无参的对象--->构造对象的过程就是调用这个函数的过程 构造函数的作用 构造函数在构造对象
最近爆火的 Ontology 本体是什么?一文看懂基础概念 + 落地实操
1993 Tom Gruber原版定义:本体是对领域概念化模型的显式形式化规范。1998 Studer完善通用定义:本体是共享、明确、形式化的领域概念模型规范。大白话翻译:本体就是机器能看懂的行业词典+业务规则手册。数据库只管存数据,本体只管定规则,知识图谱是规则+数据结合体。区别于普通开源本体工具,这款国产商用本体平台核心优势:业务沙盘推演、可控业务数据写回、全链路字段级数据血缘审计,适配企业生产级业务落地。
类详解(一)成员变量,成员函数,友元及其他注意事项和概念
创建类 创建类的方式有两种:一种是使用class关键字,另外一种是使用struct来创建类 这两种方式的区别是:在不加上访问说明符的基础上,class默认的成员都是私有的,struct默认的是公开的,所以一般如果所有的类成员和成员函数都是公开的可以直接使用struct。 class 类名 { // 成员函数或者成员变量 public: // 所有的成员变量或者成员函数都是公开的 private...
从48V到800V:TI BMS芯片如何应对高压电池管理挑战?
电池管理系统是电动汽车和储能系统的核心,负责监控电池状态、保障安全并优化性能。其核心原理在于通过高精度测量电池电压、电流和温度,结合算法估算电池的荷电状态与健康状态,从而实现精准的能量管理与寿命预测。在技术价值层面,高精度测量能最大化利用电池化学窗口,提升能量密度与续航里程;而符合功能安全标准的设计则是防止热失控等安全事故的基石。随着汽车电气化从48V轻混系统向400V/800V高压平台演进,BMS面临着测量精度、功能安全、高压隔离通信和系统成本等多重挑战。德州仪器的BQ796xx和BQ75614系列芯片,
CVPR 2027 投稿规划:基于近3年录用率与截稿周期的5步时间管理法
本文为计算机视觉研究者提供CVPR 2027投稿的完整规划指南,基于近三年录用率与截稿周期数据,提出五步时间管理法。涵盖选题策略、实验设计、论文写作、同行评审到最终提交的全流程优化,特别针对CVPR日益激烈的竞争环境(2024年投稿量达11532篇,录取率仅23.6%)提供实用解决方案,帮助研究者提升投稿成功率。
c++子类和父类同名成员函数
http://blog.youkuaiyun.com/wxq1987525/article/details/6619529 c++子类和父类成员函数重名 子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,
Simulink开发项1000例实战专栏--实例52:基于Simulink开发一个超导磁储能控制系统,实现对SMES系统的精确控制和优化
需求分析超导磁储能系统(Superconducting Magnetic Energy Storage, SMES)是一种利用超导线圈储存和释放电能的高效储能技术。SMES系统具有响应速度快、能量密度高、循环寿命长等优点,广泛应用于电力系统的调峰填谷、频率调节、电压稳定以及紧急备用电源等领域。本项目将基于Simulink平台,开发一个完整的超导磁储能控制系统,实现对SMES系统的精确控制和优化。我们将详细讲解如何设计和实现该系统,并结合实际应用案例进行说明。
所有的类模板函数写在类的外部,在一个cpp中
总结: 在同一个cpp 文件中把模板类的成员函数放到类的外部,需要注意以下几点 函数前声明 template <类型形式参数表> 类的成员函数前的类限定域说明必须要带上虚拟参数列表 返回的变量是模板类的对象时必须带上虚拟参数列表 成员函数参数中出现模板类的对象时必须带上虚拟参数列表 成员函数内部没有限定 // p15-5-所有的类模板函数写在类的外部,在一个cpp中.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。 // #include using n
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
「C++」类和对象(3)
运算符重载,赋值运算符重载,取地址运算符重载,实现日期类
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
在C++中如何分文件编程
当我们在给一个类编写一个成员函数1的时候,又使用到了这个类中另一个成员函数2,那么问题就来了,这个成员函数2是谁的呢,这就是所谓的成员函数中隐藏了一个本类的对象,调用成员函数2的肯定是一个对象,这个对象就是调用了成员函数1的那个对象它自己的成员函数2。1、在.cpp文件中,要写明作用域,也就是写明这个方法是属于哪一个类的(当然了要先把这个.h文件include进来)3、注意成员函数中隐藏了一个本类的对象——this关键字的由来。2、填写类名、.h文件名、.cpp文件名。2、一个对象必须要初始化成员变量。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
[C++类和对象] :类的this指针
解密隐藏在类中的this指针
cpp自学 day15(类和对象——对象模型和this指针)
概念核心要点空对象内存占1字节,保证对象有唯一地址。this指针隐含指针,指向调用者对象;支持链式编程和解决命名冲突。常函数用const修饰,禁止修改成员变量(mutable例外)。常对象用const修饰,只能调用常函数,禁止修改非mutable成员。关联记忆this->明确指向 → 常函数锁成员 → 常对象限调用 → mutable破约束。
(六)C++类和对象之对象模型和this指针
C++类和对象之对象模型和this指针
C++面向对象(类和对象)—— 对象模型 和 this指针(封装、继承、多态)
C++面向对象 this指针项目基础。
【C++初阶】类和对象(上)
后接类名,{}中为类的主体,要注意的是类定义结束时}后面的分号不要忘记类体中的内容称为类的成员:类中的变量称为。
《C++初阶之类和对象》【类的六大默认成员函数】
本文介绍了C++类的六大默认成员函数,重点讲解了构造函数、析构函数、拷贝构造函数和拷贝赋值运算符四种关键函数。这些默认成员函数是理解C++对象生命周期的核心知识,本文通过大量代码示例(如Stack类实现)展示了如何正确使用这些函数。
【探寻C++之旅】第三章:类和对象(下)
今天,我们继续踏入追寻C++的冒险历程。上一章我们简单 g介绍并且了解了C++中的类和对象,那么本章将继续为大家深入讲解类和对象,例如类的默认成员函数、类的类型转换、static成员、友元、内部类、匿名对象等等。下面让我们一起来进入类和对象的学习。
C++类和对象 - 2
这篇文章写的蛮久,但是内容很多,有很多干货知识。我将在后续的日期类的实现一文中将前面知识进行再度的讲解。像后面的第6点这个也会再度提及,全部都会过一遍。内容较多,希望大家学有所获!
C++类和对象入门(二)
介绍:类的默认成员函数、构造函数、析构函数、拷贝构造函数
C++类和对象之相关特性
static成员变量和static成员函数是类的静态特性,它们与类本身相关联,而不是与类的对象相关联。static成员变量需要在类的定义外初始化,并且可以通过类名或对象访问。⽤static修饰的成员函数,称之为静态成员函数static成员函数没有this指针,只能访问类的static成员变量和其他static成员函数。⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。


1万+



被折叠的 条评论
为什么被折叠?



