特殊成员变量初始化问题
2011-10-14 08:50
204 查看
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:
a. 常量型成员变量
b. 引用型成员变量
c. 静态成员变量
d. 整型静态常量成员变量
e. 非整型静态常量成员变量
对于常量型成员变量和引用型成员变量的初始化,必须通过构造函数初始化列表的方式进行。在构造函数体内给常量型成员变量和引用型成员变量赋值的方式是行不通的。
静态成员变量的初始化也颇有点特别。
参考下面的代码以及其中注释:
a. 常量型成员变量
b. 引用型成员变量
c. 静态成员变量
d. 整型静态常量成员变量
e. 非整型静态常量成员变量
对于常量型成员变量和引用型成员变量的初始化,必须通过构造函数初始化列表的方式进行。在构造函数体内给常量型成员变量和引用型成员变量赋值的方式是行不通的。
静态成员变量的初始化也颇有点特别。
参考下面的代码以及其中注释:
// Initialization of Special Data Member #include <iostream> using namespace std; class BClass { public: BClass() : i(1), ci(2), ri(i) // 对于常量型成员变量和引用型成员变量,必须通过 { // 参数化列表的方式进行初始化。在构造函数体内进 } // 行赋值的方式,是行不通的。 void print_values() { cout << "i =\t" << i << endl; cout << "ci =\t" << ci << endl; cout << "ri =\t" << ri << endl; cout << "si =\t" << si << endl; cout << "csi =\t" << csi << endl; cout << "csi2 =\t" << csi2 << endl; cout << "csd =\t" << csd << endl; } private: int i; // 普通成员变量 const int ci; // 常量成员变量 int &ri; // 引用成员变量 static int si; // 静态成员变量 //static int si2 = 100; // error: 只有静态常量成员变量,才可以这样初始化 static const int csi; // 静态常量成员变量 static const int csi2 = 100; // 静态常量成员变量的初始化(Integral type) (1) static const double csd; // 静态常量成员变量(non-Integral type) //static const double csd2 = 99.9; // error: 只有静态常量整型数据成员才可以在类中初始化 }; // 静态成员变量的初始化(Integral type) int BClass::si = 0; // 静态常量成员变量的初始化(Integral type) const int BClass::csi = 1; // 静态常量成员变量的初始化(non-Integral type) const double BClass::csd = 99.9; // 在初始化(1)中的csi2时,根据Stanley B. Lippman的说法下面这行是必须的。 // 但在VC2003中如果有下面一行将会产生错误,而在VC2005中,下面这行则可有可无,这个和编译器有关。 const int BClass::csi2; int main(void) { BClass b_class; b_class.print_values(); return 0; }
相关文章推荐
- c++数据成员变量初始化顺序问题及特殊成员变量类型初始化
- C++类成员变量初始化顺序问题
- 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- 【转】C++成员变量的初始化顺序问题
- 关于c++的类中成员变量初始化问题+初始化列表中对应顺序问题!
- 类的几种特殊的成员变量的初始化
- 特殊数据类型成员变量的初始化
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- c++中成员变量初始化问题
- 成员变量初始化的问题
- C++成员变量的初始化顺序问题
- 构造函数中成员变量初始化顺序问题
- static 成员变量 初始化问题
- 类内const static(static const)成员变量初始化问题
- C++成员变量的初始化顺序问题
- C++特殊成员变量(静态、常量、引用)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法 --转
- C++成员变量初始化顺序问题
- 特殊数据类型成员变量的初始化【转】