c語言符號(hào)大全表解釋 為什么賦值運(yùn)算符只能作為成員函數(shù)進(jìn)行重載,而不能作為友元函數(shù)重載?
為什么賦值運(yùn)算符只能作為成員函數(shù)進(jìn)行重載,而不能作為友元函數(shù)重載?我很久沒寫C了。我給你這個(gè)主意。它可以用作左值,因此需要返回*這個(gè)表單來返回引用friend函數(shù)。沒有這個(gè)指針,對(duì)嗎?賦值運(yùn)算符返回所
為什么賦值運(yùn)算符只能作為成員函數(shù)進(jìn)行重載,而不能作為友元函數(shù)重載?
我很久沒寫C了。我給你這個(gè)主意。它可以用作左值,因此需要返回*這個(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)算符)。
為什么C 賦值運(yùn)算符重載函數(shù)不能被繼承?
在賦值運(yùn)算符中,有一種C/C唯一復(fù)合賦值運(yùn)算符。它們實(shí)際上是一種縮寫形式,使變量的變化更加簡潔。Total=Total 3,這意味著將其值加上3,然后將其分配給自身。為了簡化,上面的代碼也可以寫成:total=3。同樣地,X*=y7相當(dāng)于X=X*(y7)R%=P相當(dāng)于R=R%P。復(fù)合賦值運(yùn)算符有以下幾種:符號(hào)函數(shù)=加法賦值-=減法賦值*=乘法賦值/=除法賦值%=模運(yùn)算賦值>=右移賦值&=位邏輯和賦值|=位邏輯或賦值^=位邏輯異或賦值。如果你看上面的復(fù)合賦值運(yùn)算符,有人會(huì)問,total=3和total=3之間有什么區(qū)別嗎?答案是肯定的。對(duì)于a=a1,表達(dá)式a求值兩次。對(duì)于復(fù)合運(yùn)算符a=1,表達(dá)式a只計(jì)算一次。一般來說,這種差異對(duì)程序的操作幾乎沒有影響,但是當(dāng)表達(dá)式用作函數(shù)的返回值時(shí),函數(shù)會(huì)被調(diào)用兩次(稍后解釋)。此外,如果使用普通的賦值運(yùn)算符,程序的開銷會(huì)增加,效率也會(huì)降低。