為什麼C中的過載操作符函式能定義成非成員函式

2021-05-29 18:31:21 字數 1495 閱讀 6533

1樓:風吹過的街道

可以定義成友元函式,友元函式就不是成員函式了比如,類int中的過載

專+, int operator+(int a)和友元函式是等價的

如果屬有幫助記得采納~謝謝

c++中,過載運算子的函式可以定義為類的成員函式,但是書上說在使用此過載運算子的時候,運算子左邊必

2樓:匿名使用者

這個是單目的「++」,字首寫法,前面加上運算子的話,要用空格隔開,並且那個運算子也要有適當的運算子函式可以呼叫(或者說,是已經被這個表示式中資料型別過載了才行)

c++運算子過載:為什麼流運算子不能過載為成員函式?

3樓:隔壁的蟲子

class object如果實現了成員operator<< ,呼叫其物件格式o<載運算子為成員函式後,當呼叫該運算子時,左運算元必須是該類的例項。友元函式 流引數定義第一個引數.才能呼叫cout<

雖然不能「過載」為成員函式,但是可以定義為新的成員函式,只不過使用習慣和常例不符而已。

4樓:匿名使用者

試想一下這一點:

將我們的類派生於ostream,也就是做為流類的子類,這樣,不就可以將插入運算子宣告為成員函式,並且用法也與友元方式下一樣了嗎?

那麼為什麼還要宣告為友元呢?原因上面回答者也說了一些。。。

不能過載的根本原因在於,

大部份的標準庫實現中,對ostream,istream類體系採用了建構函式保護繼承的方式。。。致使即使以繼承的方式來擴充套件流類,也會在物件例項化時遭遇阻礙。。。

另一方面,標準庫中的流類,其插入符函式沒有宣告為虛擬函式,因此子類不能對其實現進行覆蓋,所以也使成員函式過載遭遇到實質的困難。。。

總的來說,c++標準i/o庫非常繁雜且難,其實現思想很多都與常規的oop有所出入。。。在使用的時候要謹慎,並最好遵從慣例。。。

5樓:匿名使用者

class t;

t t;

成員的話,得這麼用了

t<

而不是cout<

而且也無法鏈式使用了

cout<

c++流插入流提取符號過載真的不能定義成成員函式嗎

6樓:匿名使用者

是的 不能定義成員函式

因為流插入呼叫 是

stream<< object

按照成員函式呼叫 是stream.operator<<( type & )

所以 要寫入成員函式,就要寫為流物件的成員函式, 這個是不現實的。

當然 如果你反著寫

object<

也能實現

不過 就和正常的呼叫不一樣了。

關於操作符過載的c 的程式除錯問題

建構函式的問題,沒有了無引數的建構函式了,因為你自己寫了個建構函式,所以那個無參的建構函式就沒有了,所以在定義物件的時候就無法呼叫無參的建構函式,就報錯了,所以你要將你寫的建構函式加個預設值或者是在寫一個無參的建構函式,例如 math int r 或者是增加函式 math 把math c c c1 ...

c過載函式,c中函式過載的原則是什麼啊?

c 的函式過載是指 過載函式的名稱和返回值要相同,而形參不同。形參不同包括形參的個數和形參的型別,即不同的形參列表。返回值和形參個數可以相同排除a c 函式名不同就不叫過載了排除d 應該是c c 中函式過載的原則是什麼啊?函式過載的定義 函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數...

為什麼C 過載賦值運算子必須要用成員函式而不能用普通或者友元

1 既然是操作符過載,就必然會訪問類的私有成員變數,根據類的封裝性要求,除了友元函式外,其他任何外部操作都是違規的,所以不能用普通函式來過載操作符。2 賦值操作符的過載函式在沒有顯式定義的情況下,編譯程式會自動生成,即使類成員變數包含有指標,也會將指標的值給予複製,所以往往會造成多個例項共享一個儲存...