代码改变世界

C++复习笔记---浅谈拷贝构造函数和赋值构造函数

2012-09-02 16:14  George.He  阅读(99)  评论(0)    收藏  举报
 

1.拷贝构造函数的形式

对于类X,如果它的函数形式如下

a) X&

b) const X&

c) volatile X&

d) const volatile X&

且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数

X::X(const X&);是拷贝构造函数

X::X(const X&,int val = 10);是拷贝构造函数

 

2.一个类中可以存在超过一个拷贝构造函数

class X {   

public:     

  X(const X&);   

  X(X&);            // OK  

};

编译器根据实际情况调用const拷贝构造函数或非const的拷贝构造函数

 

3.默认的拷贝构造函数行为

a)先调用父类的拷贝构造函数

b)如果数据成员为一个类的实例,则调用该类的拷贝构造函数

c)其他成员按位拷贝

 

4.默认的赋值构造函数行为

a)先调用父类的赋值构造函数

b)如果数据成员为一个类的实例,则调用该类的赋值构造函数

c)其他成员按位拷贝

 

5.提供显示的拷贝和赋值构造函数

基本的原则是子类一定要调用父类的相应函数,参考方式

Derive(const Derive& obj):Base(obj)

{

…...

}

 

Derive& operator =(const Derive &obj)

{

if ( this == &obj )

return *this;

 

//方式一

Base::operator =(obj);

 

//方式二

static_cast<Base&>(*this) = obj;

return *this;

}
另外当你的成员变量有const或者引用,系统无法为你提供默认的拷贝和赋值构造函数,我们必须自己处理这些特殊的情况