【带头学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;
}

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

相关推荐
致Great2 小时前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
ShineWinsu3 小时前
对于C++:auto_ptr、unique_ptr、shared_ptr的模拟实现
c++·面试·笔试·智能指针·unique_ptr·shared_ptr·auto_ptr
hsjiasb3 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
丰锋ff4 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘4 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路5 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
XLYcmy5 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
gugucoding5 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
m0_380743875 小时前
从零调用 Claude 教程
开发语言·python·node.js
起床学FPGA6 小时前
AI回答问题之后,会自动跳到最下面的问题
开发语言·javascript·ecmascript