1. 进入B的构造函数; 2. 进入A的构造函数。 也就是说冒号后面的代码是在一进入构造函数的时候就被调用了。 然后从左下角的Watch里面也可以看到,在系统调用构造函数括号里面的第一行代码之前,_a,_b, _c就已经分配好了。我们可以看到_a是个没有初始化过的值(系统自己生成了一个),_b和_c都是我们初始化的...
跟括号初始化就是通过初始化列表初始化,是系统创建成员变量并初始化,也就是系统为成员变量分配了一块内存并把相应的数据给填进去; 而构造函数里面调用等于号的方法,是分配好以后再进行赋值。
初始化列表是C++中构造函数的一部分,用于在构造函数体执行之前初始化对象的成员变量。它位于构造函数参数列表之后,以冒号(:)开头,后跟一个或多个以逗号分隔的初始化表达式,每个表达式直接初始化一个成员变量。 二、为什么(意义、重要性) 初始化列表的意义和重要性在于: ...
C++构造函数后根据冒号’:’的作用是初始化对象的成员变量,但这个初始化方式与构造函数初始化成员变量有些差别:构造函数中无法对常量成员与引用成员进行初始化,而使用冒号方式可以解决这个问题,下面看个例子: class A { public: A(int &c) { n = 1; m = n; } const int n; int &m; }; 使用g++编译...
1. 进入B的构造函数; 2. 进入A的构造函数。 也就是说冒号后面的代码是在一进入构造函数的时候就被调用了。 然后从左下角的Watch里面也可以看到,在系统调用构造函数括号里面的第一行代码之前,_a,_b, _c就已经分配好了。我们可以看到_a是个没有初始化过的值(系统自己生成了一个),_b和_c都是我们初始化的...
1. 进入B的构造函数; 2. 进入A的构造函数。 也就是说冒号后面的代码是在一进入构造函数的时候就被调用了。 然后从左下角的Watch里面也可以看到,在系统调用构造函数括号里面的第一行代码之前,_a,_b, _c就已经分配好了。我们可以看到_a是个没有初始化过的值(系统自己生成了一个),_b和_c都是我们初始化的...
我们在A的构造函数的后面用冒号来初始化_b和_c。现在可以通过编译了。因为系统可以在给_b和_c分配内存的时候就初始化了。那么假如我们把代码改成下面的形式: classA { public: A(int& c) { _a = 1; _b = 2; _c = c; } protected:
1. 进入B的构造函数; 2. 进入A的构造函数。 也就是说冒号后面的代码是在一进入构造函数的时候就被调用了。 然后从左下角的Watch里面也可以看到,在系统调用构造函数括号里面的第一行代码之前,_a,_b, _c就已经分配好了。我们可以看到_a是个没有初始化过的值(系统自己生成了一个),_b和_c都是我们初始化的...
1. 进入B的构造函数; 2. 进入A的构造函数。 也就是说冒号后面的代码是在一进入构造函数的时候就被调用了。 然后从左下角的Watch里面也可以看到,在系统调用构造函数括号里面的第一行代码之前,_a,_b, _c就已经分配好了。我们可以看到_a是个没有初始化过的值(系统自己生成了一个),_b和_c都是我们初始化的...