C++类成员变量和构造函数初始化
来源:互联网 发布:win7启用网络发现 编辑:程序博客网 时间:2024/06/10 16:23
内容整理自:
C++中各种类型的成员变量的初始化方法
C++成员变量、构造函数的初始化顺序
C++类中成员变量的初始化总结
成员变量初始化位置:
- 普通变量:构造函数的初始化列表中初始化或者构造函数体内进行赋值;
- static静态变量:类外进行初始化
- const常量变量:构造函数的初始化列表中初始化
- 引用变量:构造函数的初始化列表中初始化
- 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;
构造函数初始化顺序:
- 任何虚拟基类的构造函数按照它们被继承的顺序构造;
- 任何非虚拟基类的构造函数按照它们被继承的顺序构造;
- 任何成员对象的构造函数按照它们声明的顺序调用;
#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
- C++类成员变量和构造函数初始化
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- 成员变量的初始化和构造函数(1)
- C++构造函数对类成员变量初始化,使用初始化列表和构造函数内部直接赋值 的区别
- C/C++基础问答(1):通过初始化列表和构造函数内赋值初始化成员变量的区别
- 构造函数初始化成员变量问题
- 构造函数初始化const成员变量
- C++成员变量初始化与构造函数
- AS3 类成员变量的初始化和构造函数的执行 谁先谁后?
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- POJ 1160 Post Office (水DP)
- hdoj-4790-Just Random【数论】
- EditText只改变Hint字体大小
- Readactor: Practical Code Randomization Resilient to Memory Disclosure阅读笔记(一)
- 【MVC框架】——View和Controller之间的传值
- C++类成员变量和构造函数初始化
- n a^o7 !
- Http访问网络(AsyncTask 异步加载和使用HttpURLConnection)
- hdu 4635 Strongly connected (强连通缩点)
- 内部字段分隔符学习笔记
- Samba实现windows/ubuntu 文件共享
- 绝对详细!Nginx基本配置、性能优化指南
- 利用json从后端取数据
- HTTP学习要点(三)