我對這段代碼在我的頭文件中意味着什麼有點困惑。什麼是朋友ostream
friend ostream & operator << (ostream &, const something &);
有人能爲我澄清嗎?
我對這段代碼在我的頭文件中意味着什麼有點困惑。什麼是朋友ostream
friend ostream & operator << (ostream &, const something &);
有人能爲我澄清嗎?
該行代碼表示運算符< <是某些東西的朋友(因爲它在東西類定義中列出)。這意味着該運算符可以訪問那裏的變量。
這裏作爲參數的&表示您在調用方法時傳遞對象,這些參數只是這些參數對象的另一個名稱。返回ostream &意味着您要返回ostream參數,以便您可以連接<表達式,避免在使用全局cout時創建新的「cout」。
friend
關鍵字可以命名爲函數或整個類。在任何一種情況下,這意味着允許執行指定的函數或指定的類,以訪問friend
聲明出現的類的成員private
和protected
。
在這種情況下,這意味着允許operator<<
函數的該特定超載訪問something
類的內部,然後寫入輸出流,例如std::cout
。
正如很多地方所提到的,friend
是C++正常保護機制的旁路 - 它允許有問題的函數訪問通常只有類成員可以執行的受保護/私有成員。
你會經常看到操作員聲明朋友,因爲操作員從來不在類內部,而是經常需要修改類中的某些內容和/或訪問私人信息。 I.E.你可能不希望外部函數能夠使用你的內部指針等,但你可能希望能夠打印它們的狀態等等。你不會看到它們經常使用,否則 - 從技術上講,它打破封裝 - 但運營商是一種特殊情況。
C++ class
可能會聲明另一個類或函數爲friend
。友好的類和方法可以訪問班級的私人成員。因此,免費運營商方法<<
(未在任何類中定義)可以將something
插入流中,並查看並使用something
的私有成員來完成其工作。假設something
是complex
:
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;
}
https://www.google.com/search?q=C%2B%2B+friend – SLaks
你能具體談談這部分有不清晰? –