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
梨树阳光 阅读(1706)
评论(0) 编辑 收藏 引用 所属分类:
C++