程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第14章 重載操作符與轉換(2)

第14章 重載操作符與轉換(2)

編輯:C++入門知識

14.2 輸入和輸出操作符
支持I/O操作的類所提供的I/O操作接口,一般應該與標准庫iostream為內置類型定義的接口相同,因此,許多類都需要重載輸入和輸出操作符。
14.2.1 輸出操作符<<的重載
為了與IO標准庫一致,操作符應接受ostream&作為第一個形參,對類類型const對象的引用作為第二個形參,並返回ostream形參的引用。
1. 輸出操作符

class Class1 

public: 
    int counter; 
    friend ostream& operator<<(ostream& out, const Class1& c); 
public: 
    Class1(int counter = 100):counter(counter){} 
}; 
 
ostream& operator<<(ostream& out, const Class1& c) 

    out << "This is Class1!"; 
    out << c.counter; 
    return out; 


Class1 c1(200); 
cout << c1 << endl; 
return 0; 
2.輸出操作符通常所做格式化應盡量少
一般而言,輸出操作符應輸出對象的內容,進行最小限度的格式化,它們不應該輸出換行符。
盡量減少操作符所做的格式化,讓用戶自己控制輸出細節。
3. IO操作符必須為非成員函數
我們不能將該操作符定義為類的成員,否則,左操作數將只能是該類類型的對象。
相反,如果需要使用重載操作符為該類型提供IO操作,就必須將它們定義為非成員函數。IO操作符通常對非公用數據成員進行讀寫,因此,類通常將IO操作符設為友元。
14.2 輸入操作符>>的重載
輸入操作符的第一個形參是一個引用,指向它要讀的流,並且返回的也是對同一個流的引用。它的第二個形參是對要讀入的對象的非const引用,該形參必須為非const,因為輸入操作符的目的是將數據讀到這個對象中。
更重要但通常重視不夠的是,輸入和輸出操作符有如下區別:輸入操作符必須處理錯誤和文件結束的可能性。
1. 輸入操作符

friend istream& operator>>(istream& in, Class1 &c); 

istream& operator>>(istream& in, Class1 &c) 

    int i = c.counter; 
    in >> c.counter; 
 
    if(!in) 
        c = Class1(i); 
    return in; 

設置輸入操作符時,如果可能,要確定錯誤恢復措施,這很重要。

摘自 xufei96的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved