C 輸入輸出運算子的過載

2021-08-21 18:54:42 字數 784 閱讀 6736

c++中的流插入運算子「>>」和流輸出運算子「<<」在c++類庫中提供的,所有的c++編譯系統都會在提供輸入流istream和輸出流ostream,cin、cout是分別是istream類和ostream類的物件,在類庫的標頭檔案中已經對「<<」、「>>」運算子進行了過載,那麼具體是怎麼實現的?

istream& operator>>(istream& in, a& a)

c++中輸入運算子的過載第乙個引數是輸入流物件的引用,第二個引數是需要輸入的類物件的引用,我們一般將第二個引數定義為非const型別,否則無法賦值,返回值是輸入流istream&。

ostream& operator<<(ostream& out,const a& a)

c++中輸出運算子過載的第乙個引數是輸出流物件的引用,第二個引數是需要輸出的類物件的引用,我們一般將第二個引數定義為const型別,因為輸出時不需要改變物件的,返回值是輸出流ostream&。

共同點就是將輸入運算子過載函式和輸出運算子過載函式都宣告為友元類,為什麼這樣設計呢?

我們知道友元函式是可以被任意的類呼叫,實現類共享,減少不必要的系統開銷,提高效率,使得其他類可以訪問該類的私有變數。但也有缺點,就是破壞了類的封裝性,一般情況下不建議使用。

在這裡定義為友元函式,因為友元函式中不包含this指標,我們要求第乙個引數一定是輸入輸出流的引用,否則**就會變成 a << cout ,不滿足我們的習慣。

我們每個物件都可能會用到輸入輸出,所以定義為友元函式,使得我們的函式可以備任意類呼叫。

過載輸入輸出運算子

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

過載輸入輸出運算子

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

過載輸入輸出運算子

一 實驗目的 1 在實驗2 的基礎上,在類 person 中,以友元形式過載輸入輸出運算子 2 通過 cout cout display 顯示右值物件的資訊。3 通過 cin teach 或 cin stud 呼叫右值類的虛函式 setvalue 通過鍵盤輸入右值物件的資訊。1 include2 i...