Big-Three

 
The Big –Three --- 构造函数,析构函数,赋值函数
构造函数、析构函数与赋值函数是每个类最基本的函数。
对于任意一个类 A,如果不想编写上述函数,
C++编译器将自动为 A 产生四个缺省的函数,如
A(void); // 缺省的无参数构造函数
A(const A &a); // 缺省的拷贝构造函数
~A(void); // 缺省的析构函数
A & operate =(const A &a); // 缺省的赋值函数
,既然能自动生成函数,为什么还要程序员编写?
原因如下:
1)如果使用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初
始化”和“清除”的机会,C++发明人Stroustrup 的好心好意白费了。
2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”
的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。
“对于那些没有吃够苦头的 C++程序员,如果他说编写构造函数、析构函数与赋值函
数很容易,可以不用动脑筋,表明他的认识还比较肤浅,水平有待于提高。“
存在继承关系的The Big Three
构造函数--- 子类的构造函数初始化列表中要对父类构造函数进行初始化
析构函数--- 父类的析构函数加 virtual
赋值--- ???
在编写派生类的赋值函数时,注意不要忘记对基类的数据成员重新赋值。例如:
class Base
{
public:
Base & operate =(const Base &other); // 类Base 的赋值函数
private:
int m_i, m_j, m_k;
};
class Derived : public Base
{
public:
Derived & operate =(const Derived &other); // 类Derived 的赋值函数
private:
int m_x, m_y, m_z;
};
Derived & Derived::operate =(const Derived &other)
{
//(1)检查自赋值
if(this == &other)
return *this;
//(2)对基类的数据成员重新赋值
Base::operate =(other); // 因为不能直接操作私有数据成员
//(3)对派生类的数据成员赋值
m_x = other.m_x;
m_y = other.m_y;
m_z = other.m_z;
//(4)返回本对象的引用
return *this;
}
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值