【带头学C++】----- 九、类和对象 ---- 9.5 初始化列表

目录

[9.5 初始化列表](#9.5 初始化列表)

[9.5.1 对象成员](#9.5.1 对象成员)

代码:

[9.5.2 初始化列表](#9.5.2 初始化列表)


9.5 初始化列表

9.5.1 对象成员

在类中定义的数据成员一般都是基本的数据类型。但是类中的成员也可以是对象,叫做对象成员。

先调用对象成员的构造函数,再调用本身的构造函数。析构函数和构造函数调用顺序相反,先构造,后析构。

类会自动调用对象成员的无参构造

下例中,B类中定义了A类的对象,ob就是B类中的对象成员,构造顺序是先构造成员对象的无参构造,再构造自身的无参构造函数。但是析构的时候则相反的,先析构自身的,再析构A类的析构函数。

代码:

cpp 复制代码
#include <iostream>
#include "string.h"
using namespace std;

class A{
public:
    int mA;
public:
    A(){
        cout<<"A类的无参构造"<<endl;
    }
    A(int num){
        cout<<"A类的有参构造 mA="<<mA<<endl;
    }
    ~A(){
        cout<<"A类的析构函数"<<endl;
    }
};
class B{
public:
    int mB;
    A ob;//对象成员
public:
    B(){
        cout<<"B类的无参构造"<<endl;
    }
    ~B(){
        cout<<"B类的析构函数"<<endl;
    }
};
void test05(){
    B ob1;
}
int main()
{
    test05();
    return 0;
}

9.5.2 初始化列表

类想调用对象成员有参构造,必须使用初始化列表

那么调用这个对象成员的有参构造函数去传递值,这时候就像下面这样写的一样。

那么怎么使用呢?下面这个写就可以调用成员对象的有参构造方法了。

对比下之前的写法:此时会调用无参构造,无法调用有参构造

代码:

cpp 复制代码
#include <iostream>
#include "string.h"
using namespace std;

class A{
public:
    int mA;
public:
    A(){
        cout<<"A类的无参构造"<<endl;
    }
    A(int num){
        mA = num;
        cout<<"A类的有参构造 mA="<<mA<<endl;
    }
    ~A(){
        cout<<"A类的析构函数"<<endl;
    }
};
class B{
public:
    int mB;
    A ob;//对象成员
public:
    B(){
        cout<<"B类的无参构造"<<endl;
    }
    //B类的有参构造
    B(int a,int b):ob(a)   //初始化列表
    {
        //ob.mA = a;
        mB = b;
        cout<<"B类的有参构造"<<endl;
    }
    ~B(){
        cout<<"B类的析构函数"<<endl;
    }
};
void test05(){
    B ob1(10,20);
}
int main()
{
    test05();
    return 0;
}

多个对象成员,使用初始化列表,调有参构造的时候,使用 "," 英文的逗号隔开

相关推荐
爱睡懒觉的焦糖玛奇朵2 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
人工智能·python·深度学习·学习·算法·yolo·音视频
Runawayliquor2 小时前
opbase:CANN 所有算子的公共地基
大数据·数据库·人工智能·算法
徐安安ye2 小时前
FlashAttention 为什么对序列长度这么“敏感”?
人工智能·算法
潜创微科技2 小时前
IT6520:USB‑C 转 MIPI 芯片方案 4K@120Hz 高清显示
c语言·开发语言
言之。3 小时前
【Python】免费的中文 AI 配音方案
开发语言·人工智能·python
kyle~3 小时前
机器视觉---熔池相机(穿透强光的视觉感知)
c++·数码相机·计算机视觉·机器人·焊接机器人
宏笋3 小时前
C++ Coroutines(协程) 详解
c++
天天进步20153 小时前
Python全栈项目:从零手操一个高性能 API 网关
开发语言·python
Java面试题总结3 小时前
java高频面试题(2026最新)
java·开发语言·jvm·数据库·spring·缓存
王老师青少年编程4 小时前
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维前缀和】:求区间和
c++·前缀和·csp·高频考点·信奥赛·求和区间和