九、构造函数和析构函数(三) 初始化列表、对象成员初始化、const,引用成员初始化

来源:互联网 发布:win8磁盘优化无法打开 编辑:程序博客网 时间:2024/05/18 21:41
一、构造函数初始化列表
      构造函数的执行分为两部分,首先执行初始化段,在执行{}内的普通计算段。推荐在构造函数初始化列表中进行初始化,这样执行效率比较高。
class Test{public:Test(int a,int b,int c) :x(a),y(b),z(c){}//在初始化列表中初始化,效率较高,若在计算段{ x=a; y=b; z=c; },调用赋值操作,效率较低private:int x;int y;int z;};int main(){Test(1,2,3);}
二、对象成员及其初始化
对象成员的初始化必须在初始化列表中初始化,如下:
class Object{public:Object(int num) : num_(num){cout<<"Object "<<num_<<" ..."<<endl;}~Object(){cout<<"~Object "<<num_<<" ..."<<endl;}private:int num_;};class Test{public:Test(int a,int b) :x(a),obj(b){}private:Object obj;int x;};int main(){Test(1,2);}
在有对象成员的类中,先调用对象成员的构造函数初始化对象成员,在初始化类自身。
三、const成员、引用成员初始化
      因为const成员、引用成员在声明时必须被初始化,所以类成员中的const成员和引用成员也必须在初始化列表中初始化
class Test{public:Test(int a,int b) :x(a),ref(b){cout<<"const x="<<x<<endl<<"refrence ref="<<ref<<endl;}private:const int x;int& ref;};int main(){Test(1,2);}
0 0
原创粉丝点击