2014-02-24 27 views
1

我對這段代碼在我的頭文件中意味着什麼有點困惑。什麼是朋友ostream

friend ostream & operator << (ostream &, const something &); 

有人能爲我澄清嗎?

+0

https://www.google.com/search?q=C%2B%2B+friend – SLaks

+0

你能具體談談這部分有不清晰? –

回答

5

該行代碼表示運算符< <是某些東西的朋友(因爲它在東西類定義中列出)。這意味着該運算符可以訪問那裏的變量。

這裏作爲參數的&表示您在調用方法時傳遞對象,這些參數只是這些參數對象的另一個名稱。返回ostream &意味着您要返回ostream參數,以便您可以連接<表達式,避免在使用全局cout時創建新的「cout」。

2

friend關鍵字可以命名爲函數或整個類。在任何一種情況下,這意味着允許執行指定的函數或指定的類,以訪問friend聲明出現的類的成員privateprotected

在這種情況下,這意味着允許operator<<函數的該特定超載訪問something類的內部,然後寫入輸出流,例如std::cout

1

正如很多地方所提到的,friend是C++正常保護機制的旁路 - 它允許有問題的函數訪問通常只有類成員可以執行的受保護/私有成員。

你會經常看到操作員聲明朋友,因爲操作員從來不在類內部,而是經常需要修改類中的某些內容和/或訪問私人信息。 I.E.你可能不希望外部函數能夠使用你的內部指針等,但你可能希望能夠打印它們的狀態等等。你不會看到它們經常使用,否則 - 從技術上講,它打破封裝 - 但運營商是一種特殊情況。

1

C++ class可能會聲明另一個類或函數爲friend。友好的類和方法可以訪問班級的私人成員。因此,免費運營商方法<<(未在任何類中定義)可以將something插入流中,並查看並使用something的私有成員來完成其工作。假設somethingcomplex

class complex { 
    private: 
     double re; 
     double im; 
    public: 
     complex(double real = 0.0, double imag = 0.0) : re(real), im(imag) {} 
     friend ostream & operator<<(ostream& os, complex& c); 
}; 

ostream & operator<<(ostream& os, complex& c){ 
    os << c.re << std::showpos << c.im; 
    return os; 
} 
相關問題