C++默认函数

1、构造函数(函数名与类型相同,对象开辟内存做初始化)

构造函数由系统调用,初始化对象的内存空间

特点:

  1. 可以重载
  2. 不能手动调用
  3. 顺序构造

2、析构函数(释放资源)

特点:

  1. 不可重载
  2. 可以手动调用(退化为普通函数调用)
  3. 先构造的后析构

3、拷贝构造函数(用已存在的对象来生成一个相同类型的新对象)

默认的拷贝构造函数是浅拷贝

形参用&,防止递归构造形参对象导致栈溢出的问题

4、赋值运算符的重载函数:浅拷贝

作用:把一个已生成的对象赋值给相同类型的已存在的对象

实现:

  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;
};

 

 

你可能感兴趣的:(Learn)