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

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

相关推荐
王德博客7 分钟前
【Java课堂笔记】Java 入门基础语法与面向对象三大特性详解
java·开发语言
wkj00126 分钟前
接口实现类向上转型和向上转型解析
java·开发语言·c#
小刘同学++26 分钟前
用 OpenSSL 库实现 3DES(三重DES)加密
c++·算法·ssl
寒士obj1 小时前
类加载的过程
java·开发语言
无名之逆1 小时前
大三自学笔记:探索Hyperlane框架的心路历程
java·开发语言·前端·spring boot·后端·rust·编程
hweiyu001 小时前
tomcat指定使用的jdk版本
java·开发语言·tomcat
梦境虽美,却不长1 小时前
C语言 学习 宏命令(预处理) 2025年6月9日14:41:39
c语言·开发语言·学习
写写闲篇儿1 小时前
搜索二维矩阵
线性代数·算法·矩阵
橘子夏与单车少年k2 小时前
疏锦行Python打卡 DAY 27 函数专题2:装饰器
开发语言·python
Mikhail_G2 小时前
数据分析入门初解
大数据·运维·开发语言·python·数据分析