1.關於賦值運算子的過載
寫**時注意以下幾點:
1.函式返回值
要把函式返回值宣告為該型別的引用,則才可以連續賦值
2.函式形參
把傳入引數的型別宣告為
常量引用,可提高**效率,
原因:否則,從形參到實參會呼叫一次拷貝構造,且在賦值運算子函式內不改變傳入物件的狀態,所以在傳入的引用引數前加const
3.判斷傳入的引數和當前的物件(*this)是不是同乙個物件
若為同乙個,一旦釋放自身記憶體,傳入引數的記憶體也被釋放了,則找不到需要賦值的內容了
4.分配新記憶體之前要釋放物件自身已有的記憶體,否則會造成記憶體洩漏(之後總結)
5在函式結束前返回物件自身的引用(*this)(這樣才能連續賦值);
**如下
cmystring & cmystring::operator=(const cmystring& str)
delete mpdata;
mpdata = null;
int len = strlen(str.mpdata);
mpdata = new char[len + 1];
//strcpy(mpdata, str.mpdata);
for (int i = 0; i <= len; ++i)
return *this;
}
2關於輸出函式的過載問題(後續再補充)
**段friend
ostream& operator<< (ostream &out, const cmystring &str)
賦值運算子過載函式
問題 給出如下cmystring的宣告,要求為該型別新增賦值運算子函式。class cmystring 當面試官要求應聘者定義乙個複製運算子函式時,他會關注如下幾點 是否把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身 即 this 的引用?只有返回乙個引用,才可以允許連續賦值。否則如果...
C 拷貝建構函式和過載賦值函式
拷貝建構函式和過載賦值 的函式可以有效防止在淺複製過程中可能對於同一片記憶體釋放兩次的問題。然而拷貝函式和過載複製 的函式很容易混淆。拷貝建構函式是在物件建立時呼叫的,而賦值函式只能被已經存在的物件呼叫。乙個例子 類string的拷貝建構函式和賦值函式。拷貝建構函式 string string co...
賦值運算子過載函式要點
1.當類中有指標型別的資料成員或者有動態記憶體分配時,必須顯式的定義賦值操作符。2.為了滿足連續賦值,賦值操作符返回當前類物件的引用。3.賦值時要注意自我賦值的處理。是否把返回值的型別宣告位該型別的引用 是否把傳入引數的型別宣告為常量引用 const 是否釋放例項自身已有的記憶體 delete 是否...