码迷,mamicode.com
首页 > 其他好文 > 详细

构造函数的初始化表

时间:2016-08-02 16:54:04      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

1. 如果类存在继承关系,那么派生类中必须在初始化列表中调用基类的构造函数;

class A
{…
    A(int x);        // A的构造函数
};    
class B : public A
{…
    B(int x, int y);    // B的构造函数
};

B::B(int x, int y): A(x)   // 在初始化表里调用A的构造函数
{
      …
}    

2. const数据成员必须在初始化列表中进行初始化。因为const常量是属于对象的常量,而不是整个类的常量,对于每个对象,常量的值是不同的,在初始化列表中进行初始化。

3. 类的数据成员初始化,分为对象成员,和一般数据成员。可以在初始化列表中进行,也可以在构造函数内部进行。对于对象成员,采用初始化列表会更方便,因为初始化列表中初始化对象成员,直接调用的是拷贝构造函数。如果在函数体内初始化对象成员,是需要先调用对象成员类的构造函数,再调用赋值运算符函数进行赋值。

class A
{…
    A(void);                // 无参数构造函数
    A(const A &other);        // 拷贝构造函数
    A & operate =( const A &other);    // 赋值函数
};

class B
{
public:
    B(const A &a);    // B的构造函数
private:    
    A  m_a;            // 成员对象
};

B构造函数方法一:
B::B(const A &a): m_a(a)    //调用的是拷贝构造函数初始化m_a        
{ 
   … 
}    
方法二:
B::B(const A &a)
{
m_a = a;//先调用A的构造函数,创建对象m_a,再调用A的赋值函数进行赋值
…
}

 

构造函数的初始化表

标签:

原文地址:http://www.cnblogs.com/beaglebone/p/5729563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!