类对象的初始化过程与方法

news2024/9/21 14:34:30

类初始化过程与方法

一、类对象的初始化过程

1.初始化的过程

(1)对象在实例化的时候需要调用构造函数,如果对应的构造函数调用不了,这个对象是没有办法实例化的。

(2)构造函数的执行,是在内存分配之后,在对象被完全实例化以前。

eg:
class B
{
private:
	A a;
	int _b;
public:
	B(int b){_b = b;}
	void show()
	{
		a.show();
		cout << "B::" << _b << endl;
	}
};
int main()
{
	B b{2048};
	return 0;
}
2.分析
B b{ 2048 };
-----> 相当于 b.B(2048);
构造函数:
B(int b) { _b = b; }
======>能调用这个构造函数,说明 _b已经被定义了!!!


class中
private:
	A a;
	int _b;
既然 _b已经被定义了,那么 a也一定被定义了。

在这里插入图片描述

3.结论
1.在上面的结论中,调用构造函数之前,发现类成员已经被实例化了,说明调用调用构造函数之前,成员变量先被定义了 =====>  类中的类对象的实例化在调用构造函数之前

2.考虑三种情况
	(1)需要实例化的成员中 有其它类对象,并且找不到对应的构造函数!
	(2)成员变量有一个是 引用-----> int &a;
	(2)需要实例化的成员中 有const修饰的类成员变量,需要在定义的时候初始化!
	
	=====>需要一种初始化方式,来在成员变量定义的时候就初始化!!
	======>初始化列表!

二、类初始化对象的方法

1.使用初始化列表的方式,初始化类对象
class Classname1
{
private:
	// 成员变量
	int member1;
	int member2;
public:
	Classname1(){}
}

class Classname2
{
private:
	// 成员变量
	int member1;
	int member2;
	Classname1 classname1;
public:
	Classname2(){}
}

eg:初始化列表的使用
Classname2(int member1, int member2, int a, int b)
    : member1(member1), member2(member2), classname1(Classname1(a, b)) {}

在这里插入图片描述

代码示例:
#include <iostream>
using namespace std;

class Person
{
private:
	string name;
	int age;
	string sex;

public:
	Person() {}
	Person(string name, int age, string sex = "男") : name(name), age(age), sex(sex) {}
	Person(int age, string name, string sex) : name(name), age(age), sex(sex) {}


	void display()
	{
		cout << "姓名:" << this->name << endl;
		cout << "年龄:" << this->sex << endl;
		cout << "性别:" << this->age << endl;
	}
};

class Student
{
private:
	Person person;
	int stuid;
	int classid;
	
public:
	Student() {}
	Student(int stuid, string name, int age, int classid = 2326, string sex = "女") :stuid(stuid), classid(classid), person(Person(name, age, sex)) {}
	Student(int stuid, int classid, string name, int age, string sex) :stuid(stuid), classid(classid), person(Person(name, age, sex)) {}
	void display()
	{
		person.display();
		cout << "学号:" << this->stuid << endl;
		cout << "班级号:" << this->classid << endl;
	}
};

int main()
{
	Student stu1{28,73,"小龙",22,"男"};
	Student stu2{ 1,"测试用例1",22 };
	cout << "学生1的信息:" << endl;
	stu1.display();
	cout << endl << "输出学生2的信息:" << endl;
	stu2.display();
	system("pause");
	return 0;
}
2.在构造函数内部直接初始化
代码示例
#include <iostream>
using namespace std;

class Person
{
private:
    int age;
    string name;
public:
    Person(int age,string name)
    {
        this->age = age;
        this->name = name;
    }
    void display()
    {
        cout << "name = " << this->name << endl;
        cout << "age = " << this->age << endl;
    }
};

int main()
{
    Person p{18,"小龙"};
    p.display();
    return 0;
}

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

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

相关文章

好看的表情壁纸

不定时更新表情壁纸&#xff0c;后期支持头像&#xff0c;wx背景等&#xff0c;个人开发&#xff0c;觉得不错&#xff0c;可前往小程序或者公众号查看

深入理解模板进阶:掌握C++模板的高级技巧

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

基于springboot的员工绩效考核管理系统(含源文件)

&#xff08;源码附文章底部&#xff09; 摘 要 科学时代的发展改变了人类的生活&#xff0c;促使网络与计算机技术深入人类的各个角落&#xff0c;得以普及到人类的具体生活中&#xff0c;为人类的时代文明掀开新的篇章。本系统为月度员工绩效考核管理系统&#xff0c;是专为…

JAVA入门第一步2.0

一、JAVA中的关键字 Java中的关键字是Java编程语言中预先定义并保留的单词&#xff0c;它们具有特殊的含义&#xff0c;不能用作变量名、方法名或类名等标识符。以下是我查到的Java中的一些主要关键字&#xff1a; 由于我还在入门&#xff0c;所以所接触的关键字不多&#xf…

从0到1实现RPC | 02 RpcConsumer的远程调用

一、RPC的简化版原理如下图&#xff08;核心是代理机制&#xff09;。 1.本地代理存根: Stub 2.本地序列化反序列化 3.网络通信 4.远程序列化反序列化 5.远程服务存根: Skeleton 6.调用实际业务服务 7.原路返回服务结果 8.返回给本地调用方 二、新建一个模块rpc-demo-c…

如何真正改变自己? 《掌控习惯》

维持改变 1.心态 目标与体系&#xff0c;谁是真正通往成功的钥匙&#xff1f; 2.行动 习惯转变的3个层次 身份 你要成为谁&#xff1f; 你为成为他而幸福吗&#xff1f;过程结果 习惯的基本原理&#xff1a;要重视微小的改变 维持改变成两个方面入手 一、心态&#xff1a;忽略…

【算法刷题】Day33

文章目录 1. 最长湍流子数组题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码&#xff1a; 2. 最长递增子序列题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺…

详解rtklib中main函数如何配置文件

目录 Step1&#xff1a;如何给rtklib中的主函数 rnx2rtkp 传参 Step2&#xff1a;给配置选项结构体赋默认值 Step3&#xff1a;继续配置 Step4&#xff1a;寻找 main 函数参数中的 -k Step5&#xff1a;依次遍历参数 Step1&#xff1a;如何给rtklib中的主函数 rnx2rtkp 传参…

SpringBoot接口防止重复提交(AOP+Redis)

方法一&#xff1a; 若依框架的实现 【具体靠请求地址URL参数列表来判断请求是否重复】 SpingBoot接口防止重复提交_springboot接口防抖(防重复提交)的一些实现方案-CSDN博客文章浏览阅读518次。3.根据缓存键获取缓存中对象&#xff0c;如果存在&#xff0c;判断当前请求参…

156.乐理基础-和弦固定标记法(五)挂留(sus)和弦省略音(omit)和弦

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里&#xff0c;这里面有五线谱对应的音名&#xff0c;对比着看 如果一章没落下&#xff0c;看到这里&#xff0c;但是看不懂什么意思&#xff0c;那就强行下看&#xff0c;看着看着指不…

【Linux操作系统】命令的运行原理

文章目录 shell命令以及运行原理Linux系列学习目录 shell命令以及运行原理 Linux严格意义上说的是一个操作系统&#xff0c;我们称之为“核心&#xff08;kernel&#xff09;“ &#xff0c;但我们一般用户&#xff0c;不能直接使用kernel。而是通过kernel的“外壳”程序&…

怎么选择陪诊陪护APP开发公司

随着科技的发展&#xff0c;陪诊陪护APP已经成为了人们日常生活中不可或缺的一部分。它为患者提供了便捷的陪诊服务&#xff0c;也为医护人员提供了更多的工作机会。然而&#xff0c;市场上的陪诊陪护APP开发公司众多&#xff0c;如何选择一家专业且有实力的公司成为了消费者的…

DenseNet《Densely Connected Convolutional Networks》

DenseNet学习笔记 摘要引言DenseNetsResNetsDense connectivityResNet 和 DenseNet 的对比DenseBlock 向前传播的过程Composite functionPooling layersGrowth rateBottleneck layersCompression 压缩实现细节 实验训练 代码复现 摘要 最近的研究表明&#xff0c;如果卷积网络…

实现:mysql-5.7.42 到 mysql-8.2.0 的升级(rpm方式)

实现&#xff1a;mysql-5.7.42 到 mysql-8.2.0 的升级&#xff08;rpm方式&#xff09; 1、升级准备1、使用mysql-shell 检查工具检查兼容性 2、操作环境3、备份数据库、my.cnf文件&#xff0c;停止mysql服务&#xff08;重要&#xff09;4、上传、解压安装包5、查看已安装的my…

如何根据业务需求选择合适的电子合同平台?

在数字化转型的浪潮中&#xff0c;电子合同已经成为企业运营中不可或缺的一部分。然而&#xff0c;面对市场上众多的电子合同平台&#xff0c;企业如何根据自身的业务需求做出合适的选择呢&#xff1f;本文将为您一一解答。 在电子合同的签署过程中&#xff0c;数字证书颁发机…

AI论文速读 |(Mamba×时空图预测!) STG-Mamba:通过选择性状态空间模型进行时空图学习

&#xff08;来了来了&#xff0c;虽迟但到&#xff0c;序列建模的新宠儿mamba终于杀入了时空预测&#xff01;&#xff09; 论文标题&#xff1a;STG-Mamba: Spatial-Temporal Graph Learning via Selective State Space Model 作者&#xff1a;Lincan Li, Hanchen Wang&…

WeTrade众汇简单总结保证金和杠杆

通过之前的文章&#xff0c;相信各位投资者都已经明白了保证金和杠杆的含义。今天让WeTrade众汇继续简单总结一下: 财务杠杆是由经纪人提供的无息贷款&#xff0c;允许购买更多的资产或减少保证金&#xff0c;节省经纪人作为抵押品保留的资金。 保证金是交易者由经纪人保留作…

第十节HarmonyOS 常用容器组件3-GridRow

1、描述 栅格容器组件&#xff0c;仅可以和栅格子组件&#xff08;GridCol&#xff09;在栅格布局场景中使用。 2、子组件 可以包含GridCol子组件。 3、接口 GridRow(options:{columns: number | GridRowColumnOption, gutter?: Length | GutterOption, Breakpoints?: B…

企业管理:如何防止私加客户、飞单私单

1、聚合聊天与聚合管理 多个微信号可以在一界面聚合聊天&#xff0c;不用来回切换账号&#xff0c;还可以设置常用的快捷回复提高与客户沟通的效率&#xff0c;右侧可备注客户信息及跟进情况&#xff0c;也可以查看好友朋友圈&#xff0c;素材库可保存图片、视频链接方便随时可…

MATLAB机器学习工具箱——傻瓜式操作

一、使用回归学习期预测北京二手房房价 软件&#xff1a;MATLAB R2023 a 数据&#xff1a; 第一步&#xff1a;导入原始数据和待预测数据 第二步 &#xff1a;打开工具箱中的回归学习器导入学习数据 1.新建会话 2.寻找导入learning data 3.自动锁定前7列为自变量&#xff…