C++类成员变量和构造函数初始化

来源:互联网 发布:win7启用网络发现 编辑:程序博客网 时间:2024/06/10 16:23

内容整理自:

C++中各种类型的成员变量的初始化方法

C++成员变量、构造函数的初始化顺序

C++类中成员变量的初始化总结


成员变量初始化位置:

  1. 普通变量:构造函数的初始化列表中初始化或者构造函数体内进行赋值;
  2. static静态变量:类外进行初始化
  3. const常量变量:构造函数的初始化列表中初始化
  4. 引用变量:构造函数的初始化列表中初始化
  5. const static integral 变量:类的定义中初始化
初始化列表中成员变量的初始化顺序:严格按照声明次序,而不是在初始化列表中的顺序。

class BClass{    public:        BClass() : i(1), ci(2), ri(i)// 对于常量型成员变量和引用型成员变量,必须通过初始化化列表的方式进行初始化。在构造函数体内进行赋值的方式是行不通的        {         }    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)        static const double csd;// 静态常量成员变量(non-Integral type)static const char f = 'a';//可以,char也是整型数据//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. 任何虚拟基类的构造函数按照它们被继承的顺序构造;
  2. 任何非虚拟基类的构造函数按照它们被继承的顺序构造;
  3. 任何成员对象的构造函数按照它们声明的顺序调用;
#include <iostream>using namespace std;class OBJ1{public:OBJ1(){ cout<<"OBJ1\n"; }};class OBJ2{public:OBJ2(){ cout<<"OBJ2\n";}}class Base1{public:Base1(){ cout<<"Base1\n";}}class Base2{public:Base2(){ cout <<"Base2\n"; }};class Base3{public:Base3(){ cout <<"Base3\n"; }};class Base4{public:Base4(){ cout <<"Base4\n"; }};class Derived :public Base1, virtual public Base2,public Base3, virtual public Base4//继承顺序{public:Derived() :Base4(), Base3(), Base2(),Base1(), obj2(), obj1(){//初始化列表cout <<"Derived ok.\n";}protected:OBJ1 obj1;//声明顺序OBJ2 obj2;};int main(){Derived aa;//初始化cout <<"This is ok.\n";return 0;}结果:Base2 //虚拟基类按照被继承顺序初始化Base4 //虚拟基类按照被继承的顺序 Base1 //非虚拟基类按照被继承的顺序初始化Base3 //非虚拟基类按照被继承的顺序 OBJ1 //成员函数按照声明的顺序初始化OBJ2 //成员函数按照声明的顺序 Derived ok. This is ok.


0 0
原创粉丝点击