C++ 流插入和流提取運(yùn)算符的重載
— 1 —
<< 運(yùn)算符的重載
std::cout << 1 <<"hello";
提出問(wèn)題:
那這條語(yǔ)句為什么能成立呢?
cout 是什么?為什么 << 運(yùn)算符能用在 cout 上呢?
原因:
實(shí)際上,cout 是在 iostream 頭文件中定義的 ostream 類(lèi)的對(duì)象。
<< 能夠用在 cout 上是因?yàn)?,?ostream 類(lèi)對(duì) << 進(jìn)行了重載。
對(duì)于如下這條語(yǔ)句:
std::cout << 1 <<"hello";
有可能按以下的方式重載成 ostream 類(lèi)的成員函數(shù):
ostream & ostream::operator<<(int n)
{
.... // 輸出n整型的代碼
return *this;
}
ostream & ostream::operator<<(const char * s)
{
.... // 輸出s字符串的代碼
return *this;
}
那么在使用流插入<<運(yùn)算符時(shí),等價(jià)于的形式如下:
01 數(shù)據(jù)類(lèi)型是int類(lèi)型時(shí):
std::cout << 1;
上面的語(yǔ)句,等價(jià)于:
cout.operator<<(1);
02 數(shù)據(jù)類(lèi)型是字符串類(lèi)型時(shí):
std::cout << "hello";
上面的語(yǔ)句,等價(jià)于:
cout.operator<<("hello");
std::cout << 1 <<"hello";
上面的語(yǔ)句,等價(jià)于:
( cout.operator<<(1) ).operator<<("hello");
— —
假定我們要想把某個(gè)對(duì)象里的內(nèi)容進(jìn)行打印輸出,那么我們可以重載 ostream 類(lèi)的流插入 << 運(yùn)算符。
下面以 CStudent 類(lèi)作為例子:
輸出結(jié)果:
1,20,小林coding
需要注意:
ostream & operator<<(ostream & o, const CStudent & s)
函數(shù)是全局的,所以函數(shù)的第一個(gè)參數(shù)必須要傳入 ostream 的對(duì)象,并且 CStudent 類(lèi)需要將此函數(shù)聲明成友元函數(shù),使得函數(shù)可以訪問(wèn) CStudent 類(lèi)的私有成員變量。
— 2 —
>> 運(yùn)算符的重載
還是以 CStudent 類(lèi)作為例子,假設(shè)想通過(guò)鍵盤(pán)的輸入的內(nèi)容,來(lái)初始化對(duì)象,則我們可以重載 istream 類(lèi)的流提取 >> 運(yùn)算符。
輸入內(nèi)容和輸出內(nèi)容:
// 輸入內(nèi)容:
1,20,小林coding
// 輸出內(nèi)容:
1,20,小林coding
— 3 —
小結(jié)
小林coding
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!