1. 程式人生 > >C++預設函式

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