C++ 构造函数的对象初始化列表

Posted 庖丁解牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 构造函数的对象初始化列表相关的知识,希望对你有一定的参考价值。

//构造函数的对象初始化列表
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class PointA{
public:
    PointA(int _x){
        x = _x;
    }
    void GetX(){
        printf("PointA的成员变量%d\n",x);
    }
private:
    int x;
};

class PointB{
public:
    //构造函数的初始化列表
    PointB(int _a, int _b) :pa(_b), pa3(_b), pa2(_b)
    {
        //备注:先初始化 pa,其次pa2,再次pa3,与对象初始化列表没有关系,只与成员变量的定于顺序有关系
        //PointB的对象在成员变量之后初始化
        a = _a;
    }
    void GetA(){
        pa.GetX();
        printf("PointB的成员变量a的值是%d\n",a);
    }
private:
    int a;
    PointA pa;
    PointA pa2;
    PointA pa3;
};


void ProtectA(){
    //PointB pb1; //报错 error C2512: “PointB”: 没有合适的默认构造函数可用
    //分析:类PointB中有成员变量pa,pa对应的类没有提供无参构造函数,pb1的默认无参构造函数无法初始化pb1的成员变量pa
    PointB pb2(3, 4);
    pb2.GetA();

}

void main(){
    ProtectA();

    system("pause");
}

 

以上是关于C++ 构造函数的对象初始化列表的主要内容,如果未能解决你的问题,请参考以下文章

C++ 构造函数的对象初始化列表

C++ 构造函数成员初始化器列表,对象切片

C++构造函数的初始化列表

C++中,继承时,创建子类对象,能否在子类构造函数初始化列表里调用基类构造函数?

[ C++ ] 类与对象(下) 初始化列表,友元,static成员,内部类

C++类与对象第四篇:(初始化列表构造匿名对象隐式类型转换友元static成员内部类)