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

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

相关推荐
灰子学技术15 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
那个村的李富贵16 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
二十雨辰16 小时前
[python]-AI大模型
开发语言·人工智能·python
power 雀儿16 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
Yvonne爱编码16 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚16 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
熬夜有啥好16 小时前
数据结构——哈希表
数据结构·散列表
你这个代码我看不懂16 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas13616 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐16 小时前
最大堆和最小堆 实现思路
java·开发语言·算法