C++預設函式
阿新 • • 發佈:2018-12-06
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; };