posts - 15,comments - 21,trackbacks - 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或者引用,系统无法为你提供默认的拷贝和赋值构造函数,我们必须自己处理这些特殊的情况

posted on 2012-08-31 17:13 梨树阳光 阅读(1691) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理