C 流插入和流提取运算符的重载
<<運算符的重載
C 在輸出內容時,最常用的方式:
std::cout?<<?1?<<"hello";提出問題:
那這條語句為什么能成立呢?
cout 是什么?為什么?<<?運算符能用在?cout?上呢?
原因:
實際上,cout?是在?iostream?頭文件中定義的?ostream?類的對象。
<<?能夠用在?cout?上是因為,在?ostream?類對?<<?進行了重載。
對于如下這條語句:
std::cout?<<?1?<<"hello";有可能按以下的方式重載成?ostream?類的成員函數:
ostream & ostream::operator<<(int n){ ? ?.... // 輸出n整型的代碼 ? ?return *this;} ostream & ostream::operator<<(const char * s){ ? ?.... // 輸出s字符串的代碼 ? ?return *this;}那么在使用流插入<<運算符時,等價于的形式如下:
01 數據類型是int類型時:
std::cout?<<?1;上面的語句,等價于:
cout.operator<<(1);02 數據類型是字符串類型時:
std::cout?<<?"hello";上面的語句,等價于:
cout.operator<<("hello");03 數據類型組合使用時:
std::cout?<<?1?<<"hello";上面的語句,等價于:
(?cout.operator<<(1)?).operator<<("hello");— —
假定我們要想把某個對象里的內容進行打印輸出,那么我們可以重載?ostream?類的流插入?<<?運算符。
下面以?CStudent?類作為例子:
輸出結果:
1,20,小林coding需要注意:
ostream?&?operator<<(ostream?&?o,?const?CStudent?&?s)函數是全局的,所以函數的第一個參數必須要傳入?ostream?的對象,并且?CStudent?類需要將此函數聲明成友元函數,使得函數可以訪問?CStudent?類的私有成員變量。
>>運算符的重載
還是以?CStudent?類作為例子,假設想通過鍵盤的輸入的內容,來初始化對象,則我們可以重載?istream?類的流提取?>>?運算符。
輸入內容和輸出內容:
// 輸入內容:1,20,小林coding // 輸出內容:1,20,小林coding小結
要想流插入?<<?運算符和流提取?>>?運算符能針對自定義的對象,那么我們就需要重載針對該對象的?ostream?類的?<<?運算符和?istream?的?>>?運算符,并且只能重載成全局的函數。
然后在?CStudent?類里需要把上面的兩個重載函數聲明成友元函數,使得兩個重載的函數可以訪問和賦值?CStudent?類里的私有成員函數。
聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的C 流插入和流提取运算符的重载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C 代码规范注释有哪些讲究?
- 下一篇: 函数指针,指针函数,函数指针数组