簡體   English   中英

當在 class 中重載運算符 << 時,為什么我必須將其聲明為朋友 function,盡管它已經在 class 中聲明?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM