1. 进入B的构造函数; 2. 进入A的构造函数。 也就是说冒号后面的代码是在一进入构造函数的时候就被调用了。 然后从左下角的Watch里面也可以看到,在系统调用构造函数括号里面的第一行代码之前,_a,_b, _c就已经分配好了。我们可以看到_a是个没有初始化过的值(系统自己生成了一个),_b和_c都是我们初始化的...
在Student类中有两个数据成员,一个是常量数据成员,一个是引用数据成员,并且在构造函数中初始化了这两个数据成员,但是这并不能通过编译,因为常量初始化时必须赋值,它的值是不能再改变的,与常量一样引用初始化也需要赋值,定义了引用后,它就和引用的目标维系在了一起,也是不能再被赋值的。所以C ++":"后初始化...
跟括号初始化就是通过初始化列表初始化,是系统创建成员变量并初始化,也就是系统为成员变量分配了一块内存并把相应的数据给填进去; 而构造函数里面调用等于号的方法,是分配好以后再进行赋值。
一、是什么(定义、本质) 初始化列表是C++中构造函数的一部分,用于在构造函数体执行之前初始化对象的成员变量。它位于构造函数参数列表之后,以冒号(:)开头,后跟一个或多个以逗号分隔的初始化表达式,每个表达式直接初始化一个成员变量。二、为什么(意义、重要性) 初始化列表的意义和重要性在于:提高效率:直接初始化成员...
C++构造函数后根据冒号’:’的作用是初始化对象的成员变量,但这个初始化方式与构造函数初始化成员变量有些差别:构造函数中无法对常量成员与引用成员进行初始化,而使用冒号方式可以解决这个问题,下面看个例子: class A { public: A(int &c) { n = 1; m = n; } const int n; int &m; }; 使用g++编译...
转载URL:https://blog.csdn.net/zj510/article/details/8135556 作者:zj510 通常我们对类成员进行“初始化”有两种方式: 1. 构造函数后面跟冒号; 2. 构造函数里面对成员进行赋值。 有些人不太注意这个小细节,或者根本不知道他们的区别,认为两
冒号初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行。 对于在函数中初始化,是在所有的数据成员被分配内存空间后才进行的。
我们在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都是我们初始化的...