過載輸入輸出運算子

2021-07-06 09:12:22 字數 1860 閱讀 3266

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

通常情況下,輸出運算子的第乙個形參是乙個非常量的ostream 物件的引用。(非常量是因為向流寫入內容會改變其狀態; 用引用是因為流物件不支援複製)

第二個引數一般來說是乙個常量的引用,該常量是我們想要輸出的類型別。(用引用是因為我們希望避免複製實參; 用常量是因為通常列印物件的時候不需要改變物件的內容)

輸出運算子應儘量減少格式化的操作,尤其是換行符,這樣有利於使用者對輸出格式的控制。

一般會宣告為友元函式(friend),這樣輸出運算子函式才能使用類的私有成員

輸入、輸出運算子都必須是非成員函式。否則,他們的左側運算物件將是我們的類的乙個物件。

//例如,假設我們定義了類student,輸出運算子函式為成員函式

class student;

...student stu;

//為了直觀,用這種方式呼叫輸出運算子函式

stu.operator<

#include

using

namespace

std;

class student

friend ostream &operator

<

private:

int num;

string name;

};ostream &operator

<

int main()

通常情況下,輸入運算子的第乙個形參是運算子將要讀取的流的引用,第二個形參是將要讀入到的(非常量)物件的引用。(第二個形參非常量是因為目的就是將資料讀入物件中,所以物件會被改變。)

該運算子通常會返回某個給定流的引用。

輸入運算子必須處理輸入可能失敗的情況,而輸出運算子不需要。

輸入時會發生的錯誤

可能會發生下列錯誤:

1. 當流含有錯誤型別的資料時讀取操作可能失敗(輸入資料與型別不匹配)。一旦發生錯誤,後續的流使用都將失敗。

2. 當讀取操作到達檔案末尾或者遇到輸入流的其他錯誤時也會失敗。

檢查輸入是否成功

如果我們不進行錯誤判斷,可能會出現物件只有部分成員被賦了值,另外的成員未被賦值或賦值錯誤,這很可能導致該物件在以後的使用過程中引發錯誤。

解決的辦法是,對輸入結果進行判斷,如果輸入失敗,則將乙個新的預設初始化的物件賦值給操作物件。

class student

//過載輸出運算子

friend ostream &operator

<

//過載輸入運算子

過載輸入輸出運算子

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

過載輸入輸出運算子

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

輸入輸出運算子過載

過載 為了更方便實現複雜物件的輸入輸出 只貼出關鍵 多餘的就不貼了.輸出運算子過載 成員函式 ostream operator ostream os ostream boy operator ostream os include include boy.h intmain void int main...