分析以下代码的输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include<iostream>using namespace std;class A{public: A(int j):age(j)
, num(age + 1) { cout<<"age:"<<age<<",num:"<<num<<endl; }protected: int num; int age;};void main(){ A
sa(15);} |
运行结果:age:15 , num:2(num为一个随机数)
由于按成员在类定义中的声明顺序进行构造,而不是按构造函数说明中冒号后面的顺序,所以num成员被赋得是一个随机值,并不是想赋的16,因为这个时候,成员age还没有被赋值,age的内存空间中是一个随机值。其这种属性也包括类中的类对象声明以及在多重继承中的基类构造函数的调用顺序。后面章节我们会慢慢的提到的,请继续关注下面的内容更新
本文分析了一段C++代码的输出,解释了为何构造函数中成员变量的初始化顺序会导致预期外的结果。通过实例展示了成员变量初始化的顺序依据它们在类中声明的顺序而非构造函数初始化列表中的顺序。

被折叠的 条评论
为什么被折叠?



