[英]Cannot access private members from base class using friend classes
這是我的代碼:
class Base
{
friend class SubClass;
int n;
virtual int getN()
{
return n;
}
};
class SubClass: public Base
{
public:
SubClass() {}
SubClass(const SubClass& s) {}
};
int _tmain(int argc, _TCHAR* argv[])
{
SubClass s;
int x = s.getN();
return 0;
}
error C2248: 'Base::getN' : cannot access private member declared in class 'Base'
要從Base訪問我的私人成員,我還需要做什么?
您的friend
聲明意味着SubClass
可以在SubClass
范圍內訪問它。
如果要讓類的用戶訪問某些內容,則有時需要編寫public:
函數:
class SubClass : public Base
{
public:
int getN()
{
return Base::getN();
}
};
您可以編寫using聲明,將基類函數帶入當前類:
class SubClass : public Base
{
public:
// getN is considered declared at this point now (in public)
using Base::getN();
};
為什么不將n
聲明為protected
呢?
main
的代碼不是試圖訪問SubClass
方法,而是試圖訪問Base
方法-這就是為什么它不起作用的原因。
嘗試在SubClass
添加替代:
virtual int getN()
{
return Base::getN();
}
getN()
從未公開,因此tmain()不能調用它。
無論如何,讓子類成為基類的朋友不是正確的方法。 這是類型系統的一個令人困惑的顛覆。 如果要從子類訪問基類的非公共成員,但又不公開它們,則將其保護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.