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

类初始化过程与方法

一、类对象的初始化过程

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;
}

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

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

相关文章

2024腾龙杯web签到题-初识jwt(签到:这是一个登录页面)

什么是 jwt? 它是 JSON Web Token 的缩写&#xff0c;是一个开放标准&#xff0c;定义了一种紧凑的、自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息&#xff0c;该信息可以被验证和信任&#xff0c;因为它是数字签名的。它就是一种认证机制&#xff0c;…

接口自动化之操作mysql数据库!

在接口自动化测试过程中并不像UI自动化测试一样存在界面可以通过界面数据校验正确性&#xff0c;除了可以通过接口返回的数据校验还可以通过操作数据库校验数据&#xff0c;那么我们该如何做接口自动化的数据校验呢&#xff1f;这篇文章我们就讲解以mysql为例&#xff0c;讲解接…

项目系统使用异步业务流程(线程池详细实现)

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 异步化1.介绍…

雷卯有高强Ipp的多种电压ESD保护器件推荐

1.上海雷卯推出多种电压 高强Ipp ESD 防护器件 下表仅是部分展示。 3.USB PD 防浪涌方案 4.为什么需要高强Ipp ESD防护器件 硬件工程师常会遇到这种情况&#xff0c;我的PCB 板上电源也放ESD保护器件 了&#xff0c;但是当插拔电或上电瞬间ESD保护器件烧毁了&#xff0c;导致…

schweizer-electronic 公司 safedat2 操作使用说明

schweizer-electronic 公司 safedat2 操作使用说明

从上到下,深入理解LIN协议 及 进阶问题

目录 一、当LIN总线静默4s-10s时&#xff0c;节点自动进入休眠状态。这个“自动进入休眠状态”是怎么实现的&#xff1f;二、帧的架构设计2.1 问题提出2.2 帧设计 三、帧超时功能四、主节点如何接收从节点上报的数据&#xff1f;五、网络管理5.1 当功能开关关闭时&#xff0c;应…

乐得瑞科技PD协议芯片:OTG与充电并行,引领数据交互

在科技日新月异的今天&#xff0c;数据交互的方式对于我们的日常生活和工作都起到了至关重要的作用。但在OTG技术诞生之前&#xff0c;这一过程却显得相当繁琐和耗时。想象一下&#xff0c;你需要将数码相机的照片导入到笔记本电脑中&#xff0c;却不得不频繁地拔出内存卡&…

✅技术社区—使用Redis BitMap实现签到与查询历史签到以及签到统计功能

一、前言 签到是一个很常见的功能&#xff0c;如果使用数据库实现&#xff0c;那么用户一次签到&#xff0c;就是一条记录&#xff0c;假如有100万用户&#xff0c;平均每个用户每年签到次数为30次&#xff0c;则这张表一年的数据量为 3000 万条&#xff0c;一般签到记录字段不…

揭秘项目管理多重益处:加速产品上市、优化资源利用,提升质量与满意度等秘诀

一、引言 在飞速发展的商业环境中&#xff0c;项目管理已经成为企业成功的关键要素之一。正如项目管理大师哈罗德科兹纳所言&#xff1a;“项目管理不仅仅是关于完成任务的工具&#xff0c;更是一种战略武器&#xff0c;能够帮助企业获得竞争优势。”项目管理的好处多种多样&am…

Apache FtpServer在Windows上下载安装与使用

Apache FtpServer在Windows上下载安装与使用 1、Apache Ftp Server下载 进入apache官网 https://mina.apache.org/ftpserver-project/old-downloads.html 下载自己使用的版本。 Apache FtpServer 1.1.1及以下的版本需要JDK1.7的支持 Apache FtpServer 1.1.1以上的版本需要JDK…

Linux--任务管理与守护进程

目录 任务管理 进程组概念 作业概念 会话概念 补充 守护进程 基本概念 守护进程的查看 守护进程的创建 自己手写守护进程 使用系统调用函数创建守护进程 任务管理 进程组概念 每一个进程除了有一个进程ID之外&#xff0c;还有一个进程组ID&#xff0c;进程组是一个或…

新零售SaaS架构:线上商城系统架构设计

零售商家为什么要建设线上商城&#xff1f; 传统的实体门店服务范围有限&#xff0c;只能吸引周边500米以内的消费者。因此&#xff0c;如何拓展服务范围&#xff0c;吸引更多的消费者到店&#xff0c;成为了店家迫切需要解决的问题。 缺乏忠实顾客&#xff0c;客户基础不稳&a…

clickhouse突然启动不起来问题排查

场景&#xff1a; 在实现postgreql数据迁移到clickhouse中&#xff0c;想使用MaterializedPostgreSQL的功能实现&#xff0c;但是中途clickhouse突然挂了&#xff0c;就再启动不了了。 现象&#xff1a; systemctl start clcikhouse-server启动报错 [rootlocalhost clickhous…

python矢量算法-三角形变化寻找对应点

1.算法需求描述 现有随机生成的两个三角形A与B&#xff0c;在三角形A中存在Pa&#xff0c;使用算法计算出三角形B中对应的点Pb 2.python代码 import numpy as np # 计算三角形A的面积 def area_triangle(vertices): return 0.5 * np.abs(np.dot(vertices[0] - vertices[…

用python爬取CSDN博客的总字数

一、下载pycahrm 此处推荐博客&#xff1a;PyCharm安装教程&#xff0c;图文教程&#xff08;超详细&#xff09;-CSDN博客 二、安装相应的库 pycharm安装库的步骤&#xff1a; 1、打开pycharm&#xff1b; 2、在菜单栏中&#xff0c;选择 "file">"setti…

d3dcompiler43.dll缺失怎么修复,教你五个方法快速搞定

在数字世界的深渊中&#xff0c;有一个名为d3dcompiler_43.dll的神秘文件&#xff0c;它就像一把打开现代科技之门的钥匙。这个文件是DirectX 12的一部分&#xff0c;由微软公司开发&#xff0c;用于编译和处理图形数据。 d3dcompiler_43.dll是一个动态链接库&#xff08;DLL&…

代码随想录算法训练营第三十一天 | 455. 分发饼干、376. 摆动序列、53. 最大子数组和

代码随想录算法训练营第三十一天 | 455. 分发饼干、376. 摆动序列、53. 最大子数组和 455. 分发饼干题目解法 376. 摆动序列题目解法 53. 最大子数组和题目解法 感悟 455. 分发饼干 题目 解法 class Solution { public:int findContentChildren(vector<int>& g, vec…

AcWing 1250. 格子游戏 (并查集,坐标变换)

记录此题的目的&#xff1a; 明确二维的坐标可以映射到一维&#xff1a;在x和y都是从0开始的前提下&#xff0c;假如图形列数为n&#xff0c;(x,y)映射到一维可以写成x * n y。并查集并不好存储二维数据&#xff0c;如果遇到二维数据可以将其映射到一维。 Alice和Bob玩了一个…

Amazon Bedrock 实践 | 动手玩转 Claude 3

生成式 AI 和大模型在 2024 年已经进入落地实践阶段。因此&#xff0c;围绕开发者在生成式应用程序开发中的主要痛点和需求&#xff0c;我们组织了这个 “Amazon Bedrock 实践” 的系列&#xff0c;希望可以帮助开发者高效地上手生成式 AI 和大模型的应用开发&#xff0c;本篇为…

Spring:面试八股

文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块&#xff0c;主要提供IoC依赖注入功能的支持。内含四个子模块&#xff1a; Core&#xff1a;基本的核心工具类。Beans&#xff1a;提供对bean的创建、配置、管理功能…