C++ 輸入/輸出運(yùn)算符重載
C++ 能夠使用流提取運(yùn)算符 >> 和流插入運(yùn)算符 << 來(lái)輸入和輸出內(nèi)置的數(shù)據(jù)類(lèi)型。您可以重載流提取運(yùn)算符和流插入運(yùn)算符來(lái)操作對(duì)象等用戶(hù)自定義的數(shù)據(jù)類(lèi)型。
在這里,有一點(diǎn)很重要,我們需要把運(yùn)算符重載函數(shù)聲明為類(lèi)的友元函數(shù),這樣我們就能不用創(chuàng)建對(duì)象而直接調(diào)用函數(shù)。
重載輸入運(yùn)算符>>
下面我們以全局函數(shù)的形式重載>>
,使它能夠讀入兩個(gè) double 類(lèi)型的數(shù)據(jù),并分別賦值給復(fù)數(shù)的實(shí)部和虛部:
istream & operator>>(istream &in, complex &A){
in >> A.m_real >> A.m_imag;
return in;
}
istream 表示輸入流,cin 是 istream 類(lèi)的對(duì)象,只不過(guò)這個(gè)對(duì)象是在標(biāo)準(zhǔn)庫(kù)中定義的。之所以返回 istream 類(lèi)對(duì)象的引用,是為了能夠連續(xù)讀取復(fù)數(shù),讓代碼書(shū)寫(xiě)更加漂亮,例如:
complex c1, c2;cin>>c1>>c2;
如果不返回引用,那就只能一個(gè)一個(gè)地讀取了:
complex c1, c2;cin>>c1;cin>>c2;
另外,運(yùn)算符重載函數(shù)中用到了 complex 類(lèi)的 private 成員變量,必須在 complex 類(lèi)中將該函數(shù)聲明為友元函數(shù):
friend istream & operator>>(istream & in , complex &a);
>>
運(yùn)算符可以按照下面的方式使用:
complex c;cin>>c;
當(dāng)輸入1.45 2.34
后,這兩個(gè)小數(shù)就分別成為對(duì)象 c 的實(shí)部和虛部了。cin>> c;
這一語(yǔ)句其實(shí)可以理解為:
complex c;cin>>c;
重載輸出運(yùn)算符<<
同樣地,我們也可以模仿上面的形式對(duì)輸出運(yùn)算符>>
進(jìn)行重載,讓它能夠輸出復(fù)數(shù),請(qǐng)看下面的代碼:
ostream & operator<<(ostream &out, complex &A){
out << A.m_real <<" + "<< A.m_imag <<" i ";
return out;
}
ostream 表示輸出流,cout 是 ostream 類(lèi)的對(duì)象。由于采用了引用的方式進(jìn)行參數(shù)傳遞,并且也返回了對(duì)象的引用,所以重載后的運(yùn)算符可以實(shí)現(xiàn)連續(xù)輸出。
為了能夠直接訪(fǎng)問(wèn) complex 類(lèi)的 private 成員變量,同樣需要將該函數(shù)聲明為 complex 類(lèi)的友元函數(shù):(只有靜態(tài)函數(shù)才能不經(jīng)創(chuàng)建直接訪(fǎng)問(wèn))
friend ostream & operator<<(ostream &out, complex &A);
下面的實(shí)例演示了如何重載提取運(yùn)算符 >> 和插入運(yùn)算符 <<。
#include <iostream> using namespace std; class Distance { private: int feet; // 0 到無(wú)窮 int inches; // 0 到 12 public: // 所需的構(gòu)造函數(shù) Distance(){ feet = 0; inches = 0; } Distance(int f, int i){ feet = f; inches = i; } friend ostream &operator<<( ostream &output, const Distance &D ) { output << "F : " << D.feet << " I : " << D.inches; return output; } friend istream &operator>>( istream &input, Distance &D ) { input >> D.feet >> D.inches; return input; } }; int main() { Distance D1(11, 10), D2(5, 11), D3; cout << "Enter the value of object : " << endl; cin >> D3; cout << "First Distance : " << D1 << endl; cout << "Second Distance :" << D2 << endl; cout << "Third Distance :" << D3 << endl; return 0; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
$./a.out Enter the value of object : 70 10 First Distance : F : 11 I : 10 Second Distance :F : 5 I : 11 Third Distance :F : 70 I : 10
更多建議: