c++ 重載 >>(輸入) 、<< (輸出) 操作符


重載輸出操作符 <<

為了與標准庫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》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM