赞
踩
目录
成员变量初始化的顺序就是成员变量在类中的声明次序,与初始化列表中的先后次序无关
成员属性为x, y, z
- class Thing{
- public:
- private:
- int x;
- int y;
- int z;
- };
对类的成员变量进行初始化;
与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段
- class foo
- {
- public:
- foo(string s, int i):name(s), id(i){} ; // 初始化列表
- private:
- string name ;int id ;
- };
程序运行结果:
程序运行报错:
程序运行结果:
这种错误等同于:给引用x赋值,但此时x是没有指向的;
如下代码,类成员变量中先声明了_a2,再声明了_a1,因此初始化的顺序是先初始化_a2,再初始化_a1:
- #include <iostream>
- using namespace std;
- class A
- {
- public:
- A(int a)
- : _a1(a)
- , _a2(_a1)
- {}
-
- void Print()
- {
- cout << _a1 << " " << _a2 << endl;
- }
- private:
- int _a2;//先声明_a2
- int _a1;//后声明_a1
- };
-
- int main() {
- A aa(1);
- aa.Print();
- }
先声明_a2就会先初始化_a2,用_a1初始化_a2,由于此时_a1还是随机值,因此_a2的值也是随机值,_a1使用a的值1进行初始化,因此,_a1的值为1:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。