特殊数据类型成员变量的初始化

 

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:

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;

}

 

来自于:http://patmusing.blog.163.com/blog/static/13583496020101814811570/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值