C 運算子過載 輸入 輸出運算子

2022-01-11 13:43:53 字數 2079 閱讀 7510

為了與io標準庫一致,過載輸入輸出運算子函式的第乙個行參應該是流的引用,第二個行參是物件的引用。

如果過載為類的成員函式,第乙個行參應該是物件的引用,第二個行參是流的引用。

使用方式是 classobj << cout 這樣與標準io庫就不一致了,所以輸入輸出運算子不能過載為類的成員函式,可以過載為類的友元函式和普通函式。

通常過載輸出運算子的第二個行參是const的,因為輸出乙個類不許要更改它;

但是過載輸入運算子的第二個行參必須是非const的,否則無法賦值。

過載的基本方法如下:

//

過載輸出運算子

ostream& operator

<<(ostream& out, const classtype&obj)

//過載輸入運算子

istream& operator

<<(istream& in, classtype&obj)

例子:類persion使用友元函式的方式過載了輸入輸出運算子,類persiona使用了普通函式過載了輸入輸出運算子。

#include #include 

using

namespace

std;

class

persion

//operator overload : <<

friend ostream& operator

<<(ostream& out, const persion& ref

)

//operator overload : >>

friend istream& operator>>(istream& in, persion& ref

) ;

unsigned

int ag = 0

;

double he = 0

;

double we = 0

;

in>>name>>ag>>he>>we;

//check that if the inputs succeeded

if (in

)

else

returnin;

}private

:

char name[40

]; unsigned

intage;

double

height;

double

weight;

};class

persiona

//getdata

char* getname(void)

unsigned

int& getage(void)

double& getheight(void)

double& getweight(void)

private

:

char name[40

]; unsigned

intage;

double

height;

double

weight;

};//

operator overload : <<

ostream& operator

<<(ostream& out, persiona& ref)//

operator overload : >>

istream& operator>>(istream& in, persiona& ref);

unsigned

int ag = 0

;

double he = 0

;

double we = 0

;

in>>name>>ag>>he>>we;

//check that if the inputs succeeded

if (in

)

else

returnin;

}int main(void

)

C 運算子過載 輸入 輸出運算子

為了與io標準庫一致,過載輸入輸出運算子函式的第乙個行參應該是流的引用,第二個行參是物件的引用。如果過載為類的成員函式,第乙個行參應該是物件的引用,第二個行參是流的引用。使用方式是 classobj cout 這樣與標準io庫就不一致了,所以輸入輸出運算子不能過載為類的成員函式,可以過載為類的友元函...

過載輸入輸出運算子

我們平時可以用流 std cout str n 輸出 輸入字串和整型等內建型別的值。但是對於我們自定義的類,比如 student 類,卻不能直接通過 cout student 這樣的形式來輸出類的內容或給類賦值。怎麼辦呢?我們可以通過過載輸出 輸入運算子,讓自定義的類也支援這樣的操作。通常情況下,輸...

過載輸入輸出運算子

過載輸入輸出運算子 過載輸出運算子 第二個引數一般來說是乙個常量的引用,該常量是我們想要輸出的類型別。用引用是因為我們希望避免複製實參 用常量是因為通常列印物件的時候不需要改變物件的內容 輸出運算子應儘量減少格式化的操作,尤其是換行符,這樣有利於使用者對輸出格式的控制。一般會宣告為友元函式 frie...