类初始列表和类对象作为类成员

简介: 类初始列表和类对象作为类成员

初始化列表

作用:C++提供了初始化列表语法,用来初始化属性
语法:

构造函数():属性1(值1),属性2(值2).....{   }
传统初始化操作:
#include
using namespace std;
class Person
{
    
public:
    //传统初始化操作
    Person(int a, int b, int c)
    {
    
        m_A = a;
        m_B = b;
        m_C = c;
    }
    int m_A;
    int m_B;
    int m_C;
};
int main()
{
    
    Person a(10, 30, 10);
    cout << "a = " << a.m_A << endl;
    cout << "b = " << a.m_B << endl;
    cout << "c = " << a.m_C << endl;
    system("pause");
    return 0;
}

初始化列表:

#include
using namespace std;
class Person
{
    
public:
    Person(int a,int b,int c) :m_A(a), m_B(b), m_C(c)  //初始化列表
    {
    

    }
    int m_A;
    int m_B;
    int m_C;
};
int main()
{
    
    Person a(30,20,10);
    cout << "a = " << a.m_A << endl;
    cout << "b = " << a.m_B << endl;
    cout << "c = " << a.m_C << endl;
    system("pause");
    return 0;
}

类对象作为类成员

C++类中成员可以是另一个类的对象,我们称该成员为成员对象
例如

class A{
     };
class B
{
    
        A a;
};

B类中有对象A作为成员,A为对象成员

那么创建B时,A和B的构造函数和析构顺序是谁先谁后呢?

#include
#include
using namespace std;
class Phone
{
    
public:
    Phone(string Pname)
    {
    
        m_Pname = Pname;
        cout << "调用Phone的构造函数" << endl;
    }
    ~Phone()
    {
    
        cout << "调用Phone的析构函数" << endl;
    }
    string m_Pname;
};
class Person
{
    
public:
    Person(string name,string Pname):m_name(name),m_phone(Pname)//隐式转换法
    {
    
        cout << "调用Person的构造函数" << endl;
    }
    ~Person()
    {
    
        cout << "调用Person的析构函数" << endl;
    }
    string m_name;
    Phone m_phone;

};
int main()
{
    
    Person p("张三", "小米11");
    cout << p.m_name << ":" << p.m_phone.m_Pname << endl;
    return 0;
}

执行结果如下:

在这里插入图片描述
结论:

当其他类的对象作为本类成员,
构造时先构造其他类的对象,在构造自身
析构时先析构自身,再析构其他类对象
相关文章
|
Python
DataFrame合并和连接案例解析
【4月更文挑战第9天】该文介绍了Pandas中DataFrame的合并与连接。通过创建两个DataFrame `df1` 和 `df2`,分别展示其内容,然后利用`merge()`方法按姓名列合并,生成包含共同姓名的完整信息的新DataFrame。此外,还使用`concat()`方法将两个DataFrame沿垂直方向(axis=0)连接,形成一个包含所有原始数据的新DataFrame。
262 2
|
算法 Linux
linux命令之xz
linux命令之xz
541 1
|
6月前
|
存储 人工智能 自然语言处理
Cursor这类编程Agent软件的模型架构与工作流程
编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。这些模型通过海量文本和代码数据的训练,掌握了广泛的编程知识和语言理解能力。
488 1
|
存储 开发框架 缓存
ABP VNext框架中Winform终端的开发和客户端授权信息的处理
ABP VNext框架中Winform终端的开发和客户端授权信息的处理
|
11月前
|
机器学习/深度学习 人工智能 算法框架/工具
探索AI在医疗诊断中的应用
本文将带你深入了解人工智能如何在医疗诊断领域大放异彩。我们将一起探讨深度学习模型如何助力医生进行疾病预测,以及AI技术如何提高医疗图像分析的准确性。文章还将展示一些实用的代码示例,让你更直观地理解AI在医疗诊断中的应用。
232 5
|
机器学习/深度学习 运维 计算机视觉
TimesNet:时间序列预测的最新模型
2023年4月发表了一个新的模型,它在时间序列分析的多个任务中实现了最先进的结果,如预测、imputation、分类和异常检测:TimesNet。
1153 0
|
消息中间件 存储 Java
使用Java实现高性能消息队列
使用Java实现高性能消息队列
|
存储 监控 网络安全
Doris Manager 24.0 版本正式发布!
Doris Manager 24.0,SelectDB 的 Apache Doris 集群管理工具,迎来重大更新,包括管控模式升级至安全的 Agent 模式、新增任务审计、主机监控、计算节点部署支持等。此版本已获上千企业用户认可。新特性如 Agent 与 Server 间的 HTTP 通信,提升安全性;任务审计记录操作详情;监控模块扩展主机指标;集群巡检支持定时检查。此外,Doris Manager 提供了集群部署、扩缩容、升级、参数配置、日志查看、告警和审计等一系列高效管理功能。体验新版本,请参考安装和使用手册。
796 0
Doris Manager 24.0 版本正式发布!
|
XML 缓存 前端开发
SpringMVC中处理静态资源的几种方式
SpringMVC中处理静态资源的几种方式
235 0
|
关系型数据库 数据库
Harbor断电重启postgres报错 could not locate a valid checkpoint record
Harbor断电重启postgres报错 could not locate a valid checkpoint record