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");
}
时间: 2025-02-01 15:47:55

C++ 构造函数的对象初始化列表的相关文章

【C/C++】构造函数、默认构造函数、成员初始化列表

常见问题 Q1. 下列关于构造函数的描述中,错误的是( ) A. 构造函数可以设置默认的参数 B. 构造函数在定义类对象时自动执行 C. 构造函数可以是内联函数 D. 构造函数不可以重载 Q2. 下列代码中a.b的各个成员变量值是多少? 1 class Student 2 { 3 public: 4 Student() {} 5 void show(); 6 private: 7 string name; 8 int number; 9 int score; 10 }; 11 Student a

什么时候需要在类的构造函数中使用初始化列表

1,如果基类没有default构造函数,则意味着其不能自己初始化.如果其被派生,派生类的构造函数要负责调用基类的构造函数,并传递给它需要的参数.下例中Base 2,如果类成员没有默认构造函数.下例中Elem4 2,如果类的成员变量中含有const成员变量,如果不使用列表,在构造函数中是不能对其赋值的,会导致编译失败.下例中b 3,如果类的成员变量中含有引用,引用必须被初始化.下例中c 4,需要提高效率的时候,如果不使用初始化列表,而放在构造函数体内赋值的方法,则变量先被默认构造函数初始化,然后又

转:C++类构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample { public:     int a;     float b;     //构造函数初始化列表     CExample(): a(0),b(8.8)     {}     //构造函数内部赋值     CExample()     {         a=0;         b=8.8;     } }; 上面的例子中两个构造函数的结果是一样

C++之类构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class Example { public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExample() { a=0; b=8.8; } }; 例子中两个构造函数的结果是一样的.上面的构造函数(使用初始化列表的构造函数)显式的初始化类的成员:而没使用初始化列表的构造函数是对类的成员赋值

c++构造函数初始化列表

对象初始化列表出现原因 1) 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数.这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,那么他将无法完成第一步,就会报错. 2) 当类成员中含有一个const对象时,或者是一个引用时,他们也必须要通过成员初始化列表进行初始化,因为这两种对象要在声明后马上初始化,而在构造函数中,做的是对他们的赋值,这样是不被允许的. #include <iostream>

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

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample {public:    int a;    float b;    //构造函数初始化列表    CExample(): a(0),b(8.8)    {}    //构造函数内部赋值    CExample()    {        a=0;        b=8.8;    }}; 上面的例子中两个构造函数的结果是一样的.上面的构造函数(使用初

&lt;C++&gt; 类(3):初始化列表 常函数和常量对象 虚函数与多态(包括纯虚函数)

一.初始化列表(初始化列表中必须有的两个内容) 1.类中const的成员变量: ①特点:不能修改 必须初始化 在构造函数后面加冒号 格式为:":变量名(值)" 也就是说 常量必须在初始化列表中初始化 ②执行顺序:构造函数先执行初始化列表 然后执行函数中的内容 1 #include<iostream> 2 using namespace std; 3 4 class CPerson 5 { 6 public: 7 const int a; 8 public: 9 CPerso

C++类构造函数初始化列表(转)

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: { public:     int a;     float b;     //构造函数初始化列表     CExample(): a(0),b(8.8)     {}     //构造函数内部赋值     CExample()     {         a=0;         b=8.8;     } }; 上面的例子中两个构造函数的结果是一样的.上面的构造函数(使用初始化

初始化列表的用法说明

类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算 使用初始化列表有两个原因: 1.必须这样做:   <C++ Primer>中提到在以下三种情况下需要使用初始化成员列表: 一.需要初始化的数据成员是对象的情况:二.需要初始化const修饰的类成员:三.需要初始化引用成员数据:        如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成