重載輸出操作符 <<
為了與標准庫IO操作一致,重載 << 操作符函數應把ostream&作為其第一個參數,對類類型const對象的引用作為第二個參數,並返回對ostream形參的引用。
ostream& operator<<(ostream& out, const Sales_item& s) { out << s.isbn << “\t” << s.units_sold << “\t” << s.revenue << “\t” << s.avg_price(); return out; }
一般而言,“<<”應輸出對象的內容,進行最小限度的格式化,尤其不應輸出換行符,而讓用戶自己控制輸出細節。
“<<”操作符應定義為非成員函數。因為對於類的成員函數,左操作數為該類類型的對象,這樣只能將第二個參數作為ostream&,使用時:
Sales_item item;
item << cout;
這與“<<”的正常使用習慣相反。所以“<<”操作符應定義為非成員函數,並將其作為所操作類的友元。
重載輸入操作符 >>
與輸出操作符類似,輸入操作符函數的第一個形參為流的引用,第二個形參為類類型對象的引用(非const,因為 >> 的目的就是將數據讀入到該對象中)。
istream& operator>>(istream& in, Sales_item& s) { double price; in >> s.isbn >> s.units_sold >> price; // check that the inputs succeeded if (in) s.revenue = s.units_sold * price; else s = Sales_item(); // input failed: reset object to default state return in; }
輸入操作符要檢測和處理在讀入數據時可能發生的錯誤。如果輸入失敗,則確保對象處於可用和一致的狀態,比如將形參恢復為空的Sales_item對象。除此之外,還可以設置流的條件狀態。用戶如果想知道輸入是否成功,可以測試流。
【學習資料】 《c++ primer》