C++中輸出流運算符的重載


  cout是ostream類的對象,cin是istream類的對象。

  我們平時用的cout<<就相當於cout.operator<<(...)。也就是說正常使用(不對operator<<進行函數重載,我們用的都是ostream類庫中本身定義好了cout對象的成員函數

  而當我們需要對cout<<進行重載時,比如我們定義了一個類Student,他的一個對象s1,我們想要cout<<s1,這時<<的意義就改變了,因此如果我們想按照我們自己的個性化需求來使用<<運算符,就需要對其進行重載,而重載分為重載為全局函數引入為類的友元函數,由於我們是要通過cout這個iostream頭文件中定義的對象來調用operator<<這個函數,當我們cout<<一個自定義的對象時,編譯器在cout本身定義<<的那些基礎數據類型中找不到參數滿足我們需要的函數,這時有個全局函數的簽名滿足我們的需要,因此這個函數就是我們最終調用的函數,也就是我們重載<<運算符的函數。

  ex:類的友元函數

ostream& operator<<(ostream& co,const Student& s) {
       co<<s.sname<<endl;
       return co;
}

   

   關於這個函數,有兩點值得注意:

  (1)它的返回值,是這樣理解的:

cout<<5<<"hello";

   在我們輸出了一個5以后返回的是調用第一個<<的對象的引用,即相當於第一個cout,我們就可以接着連續的用同一個cout來調用第二個<<函數了

  (2)之所以把全局函數以友元的形式引入class Complex中是因為在這個重載函數的實現過程中,我們往往需要引用實參對象中的一些非公有的對象,而這時就必要獲得權限,C++中的做法便是將其以友元的形式引入class Complex中。


免責聲明!

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



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