首页 > 其他分享 >全面分析构造函数(2)

全面分析构造函数(2)

时间:2024-07-18 11:30:03浏览次数:13  
标签:分析 初始化 int 列表 num 参数 全面 构造函数

        接上一篇文章,上一篇文章介绍了类的四种构造函数:无参、有参、拷贝、移动,这篇文章介绍其他的一些重要内容,如果有错误或遗漏,请大家批评指正。

初始化参数列表

        初始化参数列表是是有参构造的一种,它可以直接初始化对象的属性,而不是给对象的属性赋值。

初始化与赋值的区别
初始化在定义一个变量的同时给它一个初值,在给值之前,还没有这个变量,不占内存,当他被定义出来之后,存储的就是这个值
赋值给一个已经占有内存空间的变量一个值,在给值之前,这个变量已经存在,并且占用内存,他存的是其他的值

        语法:返回值      函数名(参数列表):  属性1(参数1),属性2(参数2) ,...{函数体}      

        初始化参数列表在参数列表后加冒号,然后初始化的属性(要初始化的值),...后面加函数体,注意:

  • 初始化参数的顺序不是按照初始化参数列表的顺序来的,就是说,不是在这个列表中先写谁就先初始化谁,而是按照类中属性的声明顺序来的,先声明谁,先初始化谁。
  • 常量和引用必须使用初始化参数列表初始化
  • 属性中有其他类对象,且那个类没有无参构造,需要用初始化参数列表给对应类的构造函数传参
  • 只能在构造函数中使用这个语法,可以给所有的成员初始化
#include<iostream>
using namespace std;

class A {
public:
	int a;
	int b;
	A(int num1):a(num1),b(a){}
	//使用上面的构造函数,输出两个2
	//A(int num1):b(num1),a(b){}
	//使用这个构造函数,输出随机值和2
	void display() {
		cout << a << " " << b << endl;
	}
};

int main() {
	A a(2);
	a.display();
	return 0;
}

         分析上面的代码,第一个构造函数,在初始化参数列表中,先初始化a,再用a初始化b,两个属性的值相同,再看第二个构造函数,初始化参数列表中先初始化b,再用b的值初始化a,结果a的值是随机值,而b的值是2。所以通过上述内容可以证明,属性的初始化与初始化参数列表的书写顺序无关,仅与类中的声明顺序有关。

类对象作为类成员

        很多时候,我们的这个类(记作B)中需要包含其他类(记作A)的类对象,呢么在构造B的类对象的时候,就需要先调用A类的构造函数,来初始化A的对象,然后才能继续构造B的对象。析构的顺序则相反,先析构B类的,再析构A类的。

#include<iostream>
using namespace std;

class A{
public:
	int num;
	A(int num) {
		this->num = num;
	}
	
};

class B {
public:
	A a;
	B(int num):a(num){}
	//在初始化参数列表中调用A的构造函数
	void display() {
		cout << a.num << endl;
	}
};

int main() {

	B a(2);
	a.display();
	return 0;
}

       构造对象B时,先给B中成员a开辟空间,在初始化参数列表中调用A类的构造函数给a赋值 再调用B类的构造函数给b赋值。

        析构时先调用B的析构调用A的析构 。

标签:分析,初始化,int,列表,num,参数,全面,构造函数
From: https://blog.csdn.net/weixin_58234579/article/details/140514505

相关文章

  • 足球走地大小球、让球、角球预测之理性分析软件开发及逻辑详细说明
    前言足球发展已经超百余年,但发现市面上没有真正比较好的预测分析软件,本着十几年的JAVA开发经验,想着亲手做一个关于足球走地大小球、让球、角球的分析软件看看情况是怎么样的。开发本类工具需要按以下步骤进行,一、选择稳定的网站足球网站数据采集数据做此工具,我选择的是球琛......
  • 2024-07-18 浅尝rollup-plugin-visualizer——文件打包分析体积大小
    前言:vite+vue项目rollup-plugin-visualizer:一个用于Rollup构建系统的插件,它能够生成可视化的报告,展示你的项目构建后的模块依赖关系和文件大小。仓库:https://github.com/btd/rollup-plugin-visualizer安装:yarnaddrollup-plugin-visualizer配置(vite.config.ts):import{......
  • 电瓶车检测AI算法:视频智能分析技术助力电瓶车规范与安全管理
    随着电瓶车(电动自行车)的普及,其在城市交通中扮演着越来越重要的角色。然而,电瓶车的管理、安全监控以及维护等方面也面临着诸多挑战。近年来,人工智能(AI)技术的发展为解决这些问题提供了新的途径。电瓶车检测AI算法能够通过深度学习等技术对电瓶车及其相关行为进行智能识别和分析,为电......
  • 项目方案:视频图像结构化分析技术在车辆和人体检测中的应用方案(视频公共安全领域的解决
    目录一、视频结构化分析技术介绍1、概述2、定义3、核心环节4、应用领域二、视频中车辆和人的结构化1、需求2、信息内容3、功能说明(1)信息智能识别功能(2)智能检索功能(3)数据统计功能(4)布控报警(5)任务管理(6)资源管理(7)系统管理(8)接口管理三、应用实例1、人员参考场景......
  • 从头理清uboot(2)-启动流程分析
    从头理清uboot(2)-启动流程分析目录从头理清uboot(2)-启动流程分析1.总体流程图2.逐步分析2.1上电后执行的第一条指令2.2初始化中断向量表2.3初始化工作模式&初始化中断向量表。2.4cpu_init_cp15&cpu_init_crit2.4.1cpu_init_cp152.4.1cpu_init_crit2.5进入_main函数2.5......
  • 全面Burp Suite教程:深入掌握Web应用安全测试的利器
    目录Burpsuite简介1.1什么是BurpSuite?1.2BurpSuite的主要功能和组件Burpsuite安装与设置2.1下载和安装BurpSuite2.2Burpsuite设置字体2.3Burpsuite中文乱码问题Scanner模块(扫描与漏洞检测)3.1使用Scanner模块进行自动扫描3.1.1新建扫描3.1.2设置扫描范围3.1......
  • 使用 goyacc 工具構建語法分析程序
    使用goyacc工具構建語法分析程序前言本文仅讨论goyacc工具的应用,而不是编译原理的基础知识.故想要流畅地阅读本文,需要首先理解以下问题:词法分析,语法分析分别是什么?正规文法,上下文无关文法,上下文有关文法有何区别?终结符,非终结符各指代什么?想要更好地......
  • 【MIMO-OFDM】天线阵列几何形状大规模MIMO-OFDM系统半盲结构化信道估计性能的影响分析
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • QQ盗号木马动静态分析流程
    小小的记录一下~~分析对象动态分析–测试电脑环境测试电脑运行环境:Win10_64位机木马分析工具:火绒剑5.0.74,dnSpy木马动态分析运行时提示加载失败,该文件未释放任何文件,且在注册表,计划任务,服务项,用户组内未发现恶意内容存在。木马静态分析将木马拖入DIE中进行检查,发现......
  • android开发基于Android10分析请求Zygote执行Fork一个新的应用程序的过程
    android开发基于Android10分析请求Zygote执行Fork一个新的应用程序的过程```ActivityTaskManagerService.activityPausedActivityStack.activityPausedLockedRootActivityContainer.resumeFocusedStacksTopActivitiesActivityStackSupervisor.startSpecificActivityLocked......