c中的過載運算子ltlt和gtgt為什麼是只可以為友元函式

2021-04-20 20:03:53 字數 867 閱讀 9989

1樓:匿名使用者

如果是過載雙目來操作符(即為類源

的成員函式),就只要設定一個引數作為右側運算量,而左側運算量就是物件本身。。。。。。

而 >> 或<< 左側運算量是 cin或cout 而不是物件本身,所以不滿足後面一點。。。。。。。。就只能申明為友元函式了。。。

如果一定要宣告為成員函式,只能成為如下的形式:

ostream & operator<<(ostream &output)

所以在運用這個《運算子時就變為這種形式了:data<

不合符人的習慣。

為什麼賦值運算子只能作為成員函式進行過載,而不能作為友元函式過載

2樓:平整土地

因為編譯器會提供一個預設的賦值運算子,你如果把自己定義賦值運算子的寫成友元的話,函式的引數列表不一樣,不會發生過載;所以編譯器禁止了這種行為。

3樓:匿名使用者

c++規定=,[ ],(),->這四個運算子只能被過載為類的非靜態成員函式,其他

的可以被友元過載版,主要權是因為其他的運算子過載函式都會根據引數型別或數目進行精確匹配,這四個不具有這種檢查的功能,用友元定義就會出錯

4樓:宓清福文軒

好久不寫c++了,

我給你這個一個思路

它是可以作為左值的,

所以需要return

*this;

這種形式返回引用

友元函式是沒有this指標的,對吧

賦值運算子返回的是必須引用型別,這個是關鍵!!!

所以,rt

5樓:

這應該是一個規定吧。

c 運算子過載,c 運算子過載

其實第一個回答的程式已經ok了,這裡簡要說明一下 首先,名稱空間的問題。cout endl以及ostream都是定義在std這個名稱空間下的,因此在使用前必須包含這個一個using指示 using namespace std 表明可以使用std裡面的所有內容。除此以外還有兩種選擇 1.使用作用域運算...

C 運算子過載

其實很簡單,只要你對類的建構函式和解構函式了解的差不多。首先說第一個問題 為什麼會突然出現 string t p 在函式 string operator const char p 中,它接受一個字元指標p,返回一個string類物件,這個你懂吧?這就好辦了,這個函式想返回一個string類物件,必須...

C運算子過載

我想樓主主要是想看到過載函式的實現過程,所以我自動給參加運算的複數付值。考慮你是初學者,我都用的是很簡單的語句寫的,都是一看就懂的句子。include using namespace std class complex private double m image 描述實部 double m rea...