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

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

class PointA{
public:
    PointA(int _x){
        x = _x;
    }
    void GetX(){
        printf("PointA的成员变量%d
",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
",a);
    }
private:
    int a;
    PointA pa;
    PointA pa2;
    PointA pa3;
};


void ProtectA(){
    //PointB pb1; //报错 error C2512: “PointB”: 没有合适的默认构造函数可用
    //分析:类PointB定义了有参构造函数,所以系统不再提供无参构造函数
    PointB pb2(3, 4);
    pb2.GetA();

}

void main(){
    ProtectA();

    system("pause");
}
/* 初始化列表之数组初始化 */

#include <iostream>
#include <string>

class Teacher
{
public:
    //构造函数
    Teacher() :_name(""), _studentId{ 0 }
    {
    }

    //构造函数
    Teacher(const std::string &name, unsigned int *a) :_name(name), _studentId{ a[0],a[1],a[3],a[4],a[5],a[6],a[7],a[8],a[9] }
    {
    }

    //析构函数
    ~Teacher()
    {
    }

public:
    //打印学生
    void show(void)
    {
        printf("=======Teacher name[%s]===============
", this->_name.c_str());
        for (int i = 0; i < 10; i++)
        {
            printf("%5d", this->_studentId[i]);
        }
        printf("
");
    }

private:
    std::string _name;
    unsigned int _studentId[10];
};

void test()
{
    Teacher t1;
    unsigned int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
    Teacher t2("jack", a);

    printf("------t1 start-----
");
    t1.show();
    printf("------t1 end-----
");

    printf("------t2 start-----
");
    t2.show();
    printf("------t2 end-----
");
}

int main()
{
    test();
    return 0;
}
原文地址:https://www.cnblogs.com/zhanggaofeng/p/5608081.html