C 運算子過載賦值運算子

2021-06-10 03:29:02 字數 982 閱讀 5397

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。   賦值運算子過載函式的定義與其它運算子過載函式的定義是差不多的。   下面我們以例項說明如何使用它,**如下:

#include using namespace std;

class internet

if(url)

} internet(internet &temp)

if(url)

} ~internet()

internet& operator =(internet &temp)//賦值運算子過載函式

if(this->url)

return *this;

} public:

char *name;

char *url;

};

int main(){

internet a("中國軟體開發實驗室","www.***ev-lab.com");

internet b = a;//b物件還不存在,所以呼叫拷貝建構函式,進行構造處理。

cout<

上例**中的internet& operator =(internet &temp)就是賦值運算子過載函式的定義,內部需要先delete的指標就是涉及深拷貝問題的地方,由於b物件已經構造過,name和url指標的範圍已經確定,所以在複製新內容進去之前必須把堆區清除,區域的過大和過小都不好,所以跟在後面重新分配堆區大小,而後進行複製工作。 

在類物件還未存在的情況下,賦值過程是通過拷貝建構函式進行構造處理(**中的internet b = a;就是這種情況),但當物件已經存在,那麼賦值過程就是通過賦值運算子過載函式處理(例子中的b = c;就屬於此種情況)。

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

C 賦值運算子過載

c 賦值運算子過載,為什麼要返回引用?查了許多資料,基本有兩種說法 一 c c 賦值運算子的本意為 返回左值的引用 左值 賦值號左面的變數而非其值 可用以下程式段測試 int a,b 3,c 2 a b c cout 對於x y x,y均為物件時 若不返回左值的引用,將會生成臨時物件。如果不處理x ...

C 過載賦值運算子

c 類建立時,會產生乙個預設的賦值運算子函式 a operator const a 普通類例項之間賦值可能沒問題,但當類成員變數中有指標引用的動態記憶體時,複製後只是簡單地將指標值複製,而沒有將其指向的動態記憶體也拷貝乙份,這樣即多個類例項內的指標指向同一動態記憶體,當類例項析構時,會導致這塊動態記...