c++重載運(yùn)算符 C 賦值運(yùn)算符重載,為什么要返回引用?
C 賦值運(yùn)算符重載,為什么要返回引用?由于賦值操作會(huì)更改左值,而這樣的運(yùn)算符不會(huì)更改操作數(shù),因此賦值運(yùn)算符重載會(huì)返回一個(gè)表達(dá)式(a=b)=C)的引用,該表達(dá)式會(huì)再次寫入a=b。歸還臨時(shí)物品是合理的。
C 賦值運(yùn)算符重載,為什么要返回引用?
由于賦值操作會(huì)更改左值,而這樣的運(yùn)算符不會(huì)更改操作數(shù),因此賦值運(yùn)算符重載會(huì)返回一個(gè)表達(dá)式(a=b)=C)的引用,該表達(dá)式會(huì)再次寫入a=b。歸還臨時(shí)物品是合理的。如果返回引用,在大多數(shù)情況下不會(huì)出錯(cuò)或?qū)е履承┎僮鲾?shù)意外修改。然而,這使得表達(dá)式(a,b)=C出現(xiàn),這與約定有點(diǎn)不一致。當(dāng)然,也可以返回常量引用。
C 中如何重載運(yùn)算符"="用于復(fù)數(shù)的賦值?
=重載必須是成員函數(shù),因此它應(yīng)該比正常使用的函數(shù)少一個(gè)參數(shù)。而且,復(fù)數(shù)賦值后的返回值也應(yīng)該是一個(gè)復(fù)雜對(duì)象,因此應(yīng)該改為:Point&;operator=(constpoint&;AMPB){。。。//assign the real part and virtual part to return*this}返回類型僅供參考,以提高效率
我很久沒有寫C了。我給你這個(gè)主意。它可以用作左值,所以我們需要以return的形式返回引用*這個(gè)Friend函數(shù)沒有這個(gè)指針,對(duì)嗎?賦值運(yùn)算符返回必須引用的類型,這是鍵
!因此,RT
1。因?yàn)樗沁\(yùn)算符重載,所以它必須訪問類的私有成員變量。根據(jù)類的封裝要求,除了friend函數(shù)外,其他任何外部操作都是非法的,因此普通函數(shù)不能用來重載操作符。
2. 如果賦值運(yùn)算符的重載函數(shù)沒有顯式定義,編譯器將自動(dòng)生成它。即使類成員變量包含指針,指針值也會(huì)被復(fù)制。因此,往往造成多個(gè)實(shí)例共享一個(gè)存儲(chǔ)空間的尷尬局面。分解第一個(gè)定義的類時(shí),剩余的實(shí)例仍然指向釋放的存儲(chǔ)空間,指針的值將從類中刪除,但是成員變量的值已被破壞,實(shí)例仍然存在不可接受的現(xiàn)實(shí)。
3. 賦值函數(shù)是構(gòu)造函數(shù)的重載,而不是普通成員函數(shù),不能由對(duì)象調(diào)用。函數(shù)只需要一個(gè)相同類型的參數(shù),以常量和引用的形式出現(xiàn)。友元函數(shù)的參數(shù)與重載運(yùn)算符的個(gè)數(shù)一致,如,-、*、/等都需要兩個(gè)參數(shù)。這些概念類似于數(shù)學(xué)概念。賦值運(yùn)算符=不是數(shù)學(xué)概念中的運(yùn)算符。因此,運(yùn)算符重載的友元函數(shù)的參數(shù)不小于2(這些運(yùn)算符是數(shù)學(xué)概念中的運(yùn)算符)。