2013-03-09 139 views
1

我只是C++語言的初學者,我對這段代碼有一些疑問。我試圖超載一些運營商。運算符重載(=)

string& operator = (char R) { string T = R ; *this = T; return *this; } 

第一個問題:爲什麼我需要重載相等操作,而構造函數可以勝任這項工作?
第二個問題:(不相關)(char R)是什麼意思?

+0

首先,什麼是'T'? – Rob 2013-03-09 12:55:57

+0

所有關於運算符重載:http://stackoverflow.com/questions/4421706/operator-overloading – chr 2013-03-09 12:57:11

+1

在C中沒有運算符重載! – 2013-03-09 12:57:20

回答

2

首先問:爲什麼我需要重載相等操作,而構造函數可以勝任這項工作?

構造被設計成「構造」的對象......而有一些所謂的拷貝構造函數,它的目的不是以實際已經存在的對象複製到相同的另一個已有對象(或可轉換)類型...這是operator=的工作。此外,您不是「重載」operator=方法,而是創建用於使用方法的用戶定義版本,而不是用於對象類型的默認編譯器創建方法,該方法只需強制複製內存佔用位將一個對象轉換爲另一個對象......如果您的對象正在管理它自己的指針等,那麼這樣的暴力拷貝可能是非常糟糕的事情,因爲指針所有權變得模糊不清等等。

+0

明白了點..我忘了構造函數只被調用一次..因此,我們使用這些用戶定義的版本進行更遠的編輯..對嗎? – geekybedouin 2013-03-09 13:15:03

+0

正確的是,在調用構造函數並且存在對象實例之後,賦值運算符用於副本。請記住[「三法則」](http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))雖然...如果您實際上需要用戶定義的賦值運算符,那麼您可能還需要爲您的類使用用戶定義的複製構造函數和析構函數,因爲您很可能管理資源,這些方法的默認編譯器版本將無法正確處理。 – Jason 2013-03-10 08:26:00

+0

aha ..得到了整點..非常感謝:) – geekybedouin 2013-03-10 23:14:01

0

(char R)是右側運營商(這裏=

你想這樣做,這樣你就可以後初始化設置的值的說法

//constructor 
Foo a('f') 
//copy constructor 
Foo b = Foo('p'); 
// operator= 
b = 'g'; 
0

(char R)是運算符的參數,就像您有一個正常函數的參數一樣。