C++:初始化列表
C++:初始化列表
当我们的类中存在const
成员我们该怎么对const
成员进行初始化呢?
我们可以通过初始化列表对const
成员进行初始化
ClassName :: ClassName () :m1(v1),m2(v1,v2),m3(v3){
}
1.初始化列表的使用
#include <iostream>
using namespace std;
class Test{
private:
const int ci;
public:
Test():ci(10){
}
int GetCI(){
return ci;
}
};
int main(){
Test t;
cout << "CI = " << t.GetCI() << endl;
return 0;
}
2.初始化列表的顺序
初始化顺序与声明的顺序相同。
成员的初始化顺序与初始化列表中的位置无关。
初始化列表先于构造函数的函数体执行。
#include <iostream>
using namespace std;
class Value{
private:
int m1;
public:
Value(int i){
cout << "i=" << i << endl;
m1 = 1;
}
int GetI(){
return m1;
}
};
class Test{
private:
Value m2;
Value m1;
Value m3;
public:
Test():m1(1),m2(2),m3(3){
}
};
int main(){
Test t;
return 0;
}
3.类中的const
成员
类中的const
成员会被分配空间。---当对象分配在哪,const成员就会分配在哪
类中const
成员的本质是只读变量。---因为我们可以通过指针去修改它
类中const
成员只能在初始化列表中指定初始化的值。---不信的话可以试试
编译器无法直接得到const
成员的初始值;
因此无法进入符号表成为真正意义上的常量。
#include <iostream>
using namespace std;
class Value{
private:
int m1;
public:
Value(int i){
cout << "i=" << i << endl;
m1 = 1;
}
int GetI(){
return m1;
}
};
class Test{
private:
const int ci;
Value m2;
Value m1;
Value m3;
public:
Test():m1(1),m2(2),m3(3),ci(120){
cout << "Test:test" << endl;
}
int GetCI(){
return ci;
}
void SetCI(int v){
int *p = const_cast<int *>(&ci);
*p = v;
}
};
int main(){
Test t;
cout << "GetCI = " << t.GetCI() << endl;
t.SetCI(9);
cout << "GetCI = " << t.GetCI() << endl;
return 0;
}
4.初始化和赋值的区别
int i = 0; //初始化
i = 0; //赋值
小结
1.类中可以使用初始化列表对成员进行初始化。
2.初始化列表先于构造函数体执行。
3.类中可以定义const
成员变量。
4.const
成员变量必须在初始化列表中指定初值。
5.const
成员变量为只读变量。
本篇文章来自于个人学习记录,若有纰漏还请指正。
编译环境:codeblock
致我的家人和朋友.感谢他们陪我走过人生中最困惑的时光。
以前我总是逃避,我想好好面对余生。