[英]When overloading operator << inside a class, why I must declare it as a friend function despite the fact that it is already declared inside the class?
我正在嘗試在 class 中重載運算符'<<',但必須將其聲明為朋友function 否則編譯器會出錯: binary'operator<<' has too many parameters這是我的 ZC1C42145074C68394D
ostream& operator<< (ostream& sout, const SimpleVector v);
I understand that friend function is used if I want to implement the function outside the class and access non-public class member, but this time I am implementing the function inside the class why do I need to use friend keyword
如果您真的想在 class 中定義 stream 運算符,則需要省略參數const SimpleVector v
因為它已經在this
指針中。 但是,您不能像往常一樣使用運算符(因為缺少統一的 function 調用語法):
std::cout << SimpleVector() << std::endl;
因為這調用了免費的 function
operator<<(std::ostream&, const SimpleVector);
您需要以繁瑣的方式調用成員 function:
SimpleVector v;
v.operator<<(std::cout) << std::endl;
Npn-static 成員函數被認為有一個額外的參數,稱為隱式 object 參數,它代表已調用成員函數的 object。 有一個約定,隱含的 object 參數(如果存在)始終是第一個參數,而隱含的 object 參數(如果存在)始終是第一個參數。
所以這個聲明在 class
ostream& operator<< (ostream& sout, const SimpleVector v);
意味着 function 具有三個參數,而重載operator <<
是二元運算符。
當這樣的 function 被聲明為朋友 function 時,則不會出現指向 object 的 ZA2C212ED4F8EBC2CBBBB1 的隱式參數。
我知道如果我想在 class 之外實現 function ,則使用朋友 function
您可以在 class 定義中實現朋友 function。
函數被聲明為友元函數,以便可以訪問友元函數中類的私有和受保護成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.