C++——初始化成员列表

在C++中,初始化成员列表(Initializer List)是一种特殊的构造函数语法,用于在对象创建时直接初始化其成员。初始化成员列表通常用于以下几种情况:

1、初始化基类构造函数

一个类从其他类派生而来,它的构造函数要调用基类的构造函数,所以要初始化基类的成员列表。

代码示例:

#include <iostream>
using namespace std;

class Base{
    public:
        Base(int x):data(x){
            cout<<"Base constructor called with "<<data<<endl;
        }
    private:
        int data;    
};

class Derived:public Base{
    public:
        Derived(int x,int y):Base(x),data(y){
            cout<<"Derived constructor called with "<<data<<endl;
        }
    private:
        int data;
};
int main()
{
    Derived(10,20);
    return 0;
}

运行结果:

2、初始化常量成员

常量成员必须在构造函数中初始化,因为该成员变量一旦初始化,就不能再改变。

#include <iostream>
using namespace std;

class Myclass{
    private:
        int const Data;//常量成员
    public:
        Myclass(int value):Data(value){
            cout<<"Myclass constructor called with "<<Data<<endl;
        }
        
};
int main()
{
    Myclass obj(10);
    return 0;
}

运行结果:

3、初始化引用成员

引用成员定义后必须初始化,引用成员变量初始化必须绑定一个对象,并且绑定后的对象不能修改,所以必须初始化引用成员。

#include <iostream>
using namespace std;

class Myclass{
    private:
        int &refData;//引用成员
    public:
        Myclass(int &ref):refData(ref){
            cout<<"Myclass constructor called with reference "<<refData<<endl;
        }
};
int main()
{
    int data = 10;
    Myclass obj(data);
    return 0;
}

运行结果:

4、初始化需要特殊初始化的成员

某些情况下,成员变量需要特殊的初始化逻辑,而不是简单的赋值。例如,当成员变量是一个复杂的对象时,可能需要执行一些额外的初始化步骤。

代码示例:

#include <iostream>
using namespace std;

class ComplexObject{
    public:
        ComplexObject(const string& name){
            cout<<"ComplexObject constructor called with "<<name<<endl;
        }
};

class Myclass{
    private:
        ComplexObject complexObj;//需要特殊初始化的成员
    public:
        Myclass(const string &name):complexObj(name){
            cout<<"Myclass constructor called"<<endl;
        }
};
int main()
{
    Myclass obj("hello");
    return 0;
}

运行结果:Myclass中的成员函数的类型涉及到其他类,所以必须要对涉及到的类进行一些额外的初始化步骤。

5、初始化指针成员

当成员是一个指针时,通常需要在初始化成员列表中将其初始化为 nullptr 或者指向一个有效的对象。这个在之前RALL资源获取也讲过,主要方便程序员对内存的分配和释放,防止出现野指针的情况。

6、初始化多个成员变量

当类中有多个成员变量时,可以在初始化成员列表中一次初始化多个成员。

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass(int a, int b, int c) : data1(a), data2(b), data3(c) {
        cout << "MyClass constructor called" << endl;
    }

private:
    int data1;
    int data2;
    int data3;
};

int main() {
    MyClass obj(10, 20, 30);
    return 0;
}

总结:

需要初始化列表成员的情况主要分为:

1、派生类成员需要调用基类的构造函数

2、类成员变量是常量。

3、列表成员存在引用变量。

4、列表成员中存在指针变量

5、列表成员中存在需要特殊初始化的成员

6、存在多个成员变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值