我們平時可以用流 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...