c 輸出運算子過載問題,C 運算子過載 為什麼流運算子不能過載為成員函式?

時間 2021-09-04 02:37:24

1樓:

呵呵,ostream & os就是cout ,所以cout << node << endl 就是先(cout << node ),根據friend ostream & operator << ( ostream & os , node temp )知輸出node,然後生成新的流物件cout,就變成了cout << endl,又是cout 和endl的過載,得到結果。

更具體的說,(cout << node)就是( ostream & os , node temp )。

至於有些情況下只有一個引數的原因,我拿這個做例子:

class complex

void display()

{coutimag ,是隱藏的,從 c.real =real+c2.real ;中也可以看到,real前面隱藏了this指標。

表示式為" this.operator + (c2)",

在非成員函式中,就必須再額外指定一個c1,也就是表示式變成"c1.operator + (c2)“。

不知道這樣說你明白不,我感覺我已經說的很清楚了。

2樓:

《運算子過載和 +號一樣,屬於雙目運算子。

cout是第一引數,node是第二個引數,你可以這麼看:

(<<(cout, node), endl);

3樓:世界很大我要去看看

輸入輸出運算子只能過載為友元,你可以把》 或者《看做特殊的函式名來使用,<< 的左邊和右邊各是一個引數

4樓:匿名使用者

因為過載的ostream& os物件起的作用就是《輸出符而已

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

5樓:隔壁的蟲子

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

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

6樓:匿名使用者

試想一下這一點:

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

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

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

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

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

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

7樓:匿名使用者

class t;

t t;

成員的話,得這麼用了

t<

而不是cout<

而且也無法鏈式使用了

cout<

c++中為什麼要用輸入輸出運算子過載,有什麼作用?。。。。急用。。。新手不懂!

8樓:救世大英雄啊

比如<<,在平時他是輸出普通變數等,如int a=10;cout<類的物件,如class people{};

people p();

你想直接用cout<

9樓:匿名使用者

簡單解釋一下,a、b為整型,那麼可以直接a+b,如果a、b是類student的物件呢?a+b表示什麼?過載運算子最大的用處就是可以用於兩個物件或者物件與常規型物件之間,a+b你可以過載'+'為類student的分數相加,或者其他(年齡、錢數...

),明白?

10樓:匿名使用者

過載運算子主要是為了。。。比如 沒有 string型別 在c裡面你想要 讓 char * p1 = "123" char *p2 = "456" p1 + p2 。。。這種結果無法預知的,但是你通過string 類過載 + 運算子 你可以 string p1 string p2 .............

p1 + p2 這種就是正確的了。主要方便運算操作

c++中輸入輸出流運算子過載求個具體的例子,儘量簡單點兒。新手

11樓:匿名使用者

class point

friend ostream& operator<<(ostream& cout,const point& p);//使用友元函式過載

<<輸出運算子

friend istream& operator>>(istream& cin,point& p);//使用友元函式過載》輸出運算子

}; ostream& operator<<(ostream& cout,const point& p)

呼叫:void main()

{point a(1);

point b(2);

cin>>a>>b;

cout<

12樓:匿名使用者

這個很複雜的,不是簡單的能說清楚的

c++過載運算子<<後出錯

13樓:匿名使用者

ostream & operator<<名字改了*/

out<

在最前面加上using namespace std;

C 怎樣過載下標運算子,C 運算子過載時過載賦值運算子和下標運算子時型別中的 是什麼意思?為什麼要加?

過載運算 在需要過載的類中宣告 classname operator int i 就可以了。引數i是代表傳入的 括號中的值 索引 因為我們使用 的使用會用到類似 a i value的表示式去賦值,所以返回類的引用可以支援賦值操作。這裡有我修改的一段示例 上上西 給個示例,以樓上 為基礎,再包含標頭檔...

c 過載運算子用於輸出複數

阿君 宣告為友元類,friend ostream operator 實現部分 ostream operator 書道聖儒 過載輸出運算子 include class ccomplex ccomplex double rv ccomplex double rv,double iv friend cco...

c 中的下標運算子有什麼作用,c 中的運算子過載主要用來做什麼?

仙戈雅 c c 下標運算子 的具體作用是取地址運算子,簡稱取址符,它的語義是當前變數的首地址加取中括號裡面的偏移量就可定位指定下標的值在記憶體儲存的位置。 微控制器與plc程式筆記 以下是c 程式語言中的所有運算子的優先順序和結合性列表。優先順序運算子敘述示例過載性結合性1 作用域解析 c 專有 c...