我試圖在類中多載運算子“<<”,但必須將其宣告為友元函式,否則編譯器會出錯:二進制“運算子<<”有太多引數 這是我的函式原型:
ostream& operator<< (ostream& sout, const SimpleVector v);
我知道如果我想在類外實作函式并訪問非公共類成員,則使用friend函式,但是這次我在類內部實作函式為什么需要使用friend關鍵字
uj5u.com熱心網友回復:
如果你真的想在你的類中定義流運算子,你需要省略引數,const SimpleVector v因為它已經在this指標中了。但是,您不能像往常一樣使用運算子(因為缺少統一的函式呼叫語法):
std::cout << SimpleVector() << std::endl;
因為這呼叫了 free 函式
operator<<(std::ostream&, const SimpleVector);
您需要以繁瑣的方式呼叫成員函式:
SimpleVector v;
v.operator<<(std::cout) << std::endl;
uj5u.com熱心網友回復:
Npn-static 成員函式被認為有一個額外的引數,稱為隱式物件引數,它表示呼叫了成員函式的物件。有一個約定,即隱式物件引數(如果存在)始終是第一個引數,而隱式物件引數(如果存在)始終是第一個引數。
所以這個類中的宣告
ostream& operator<< (ostream& sout, const SimpleVector v);
意味著該函式具有三個引數,而多載的operator <<是一個二元運算子。
當這樣的函式被宣告為友元函式時,則不存在參考類物件的隱式引數。
我知道如果我想在類外實作該功能,則使用友元功能
您可以在類定義中實作友元函式。
函式被宣告為友元函式,以便可以訪問友元函式內的類的私有成員和受保護成員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402201.html
上一篇:從同一個父類的另一個類訪問物件
