1、构造函数(函数名与类型相同,对象开辟内存做初始化)
构造函数由系统调用,初始化对象的内存空间
特点:
- 可以重载
- 不能手动调用
- 顺序构造
2、析构函数(释放资源)
特点:
- 不可重载
- 可以手动调用(退化为普通函数调用)
- 先构造的后析构
3、拷贝构造函数(用已存在的对象来生成一个相同类型的新对象)
默认的拷贝构造函数是浅拷贝
形参用&,防止递归构造形参对象导致栈溢出的问题
4、赋值运算符的重载函数:浅拷贝
作用:把一个已生成的对象赋值给相同类型的已存在的对象
实现:
- 自赋值的判断
- 释放旧资源
- 申请新资源
- 赋值
以CGoods为例:
class CGoods
{
public:
CGoods(char* name, float price, int amount)
{
mname = new char[strlen(name) + 1]();
strcpy(mname, name);
mprice = price;
mamount = amount;
}
CGoods(float price)
{
mname = new char[1]();
mprice = price;
}
CGoods()
{
mname = new char[1]();
}
CGoods(const CGoods& rhs)
{
mname = new char[strlen(rhs.mname) + 1]();
strcpy(mname, rhs.mname);
mprice = rhs.mprice;
mamount = rhs.mamount;
}
~CGoods()
{
delete[] mname;
}
CGoods& operator=(const CGoods& rhs)
{
if (this != &rhs)
{
delete[] mname;
mname = new char[strlen(rhs.mname) + 1]();
strcpy(mname, rhs.mname);
mprice = rhs.mprice;
mamount = rhs.mamount;
}
return *this;
}
private:
char* mname;
float mprice;
int mamount;
};