一個子類是否繼承,主類的朋友關聯(主類和其他類都與主類有聯繫)?C++的朋友繼承?
或者換一種說法,繼承如何應用於friend關鍵字?
擴大: 如果不是,有什麼辦法繼承友誼嗎?
我跟了喬恩的建議,發佈了設計問題:
C++ class design questions
一個子類是否繼承,主類的朋友關聯(主類和其他類都與主類有聯繫)?C++的朋友繼承?
或者換一種說法,繼承如何應用於friend關鍵字?
擴大: 如果不是,有什麼辦法繼承友誼嗎?
我跟了喬恩的建議,發佈了設計問題:
C++ class design questions
朋友只適用於你明確地讓它成爲朋友的班級而沒有其他班級。
答案很簡單:沒有,子類不繼承的朋友關聯。朋友只能訪問該協會聲明的班級的私人成員,而不能訪問該班級的父母和/或孩子的私人成員。雖然您可能是訪問受保護的超類成員,但我不確定這一點。
Derived類可以隨時訪問Base類的受保護成員,它通過** Inheritance **而不是** Friend **發送。 –
@Als:一個派生類可以隨時訪問基類的受保護成員。不,實際上取決於。取決於繼承的種類! – Nawaz
@Nawaz:不是真的! [什麼是訪問說明符,我應該繼承私有保護或公共](http://stackoverflow.com/questions/5447498/what-are-access-specifiers-should-i-inherit-with-private-protected-or-public /%5d)應該是一個很好的解讀。 –
您可以在父項中創建(靜態)受保護的方法,這將允許您執行類似的操作。
class MyFreind
{
private:
int m_member;
friend class Father;
};
class Father
{
protected:
static int& getMyFreindMember(MyFreind& io_freind) { return io_freind.m_member; }
};
class Son : public Father
{
public:
void doSomething(MyFriend& io_freind)
{
int& friendMember = getMyFreindMember(io_freind);
// ....
} //()
};
然而,這繞過封裝,所以你可能應該再看看你的設計。
這似乎更適用於其他鏈接的問題。良好的反應。我正在考慮重新設計。 – SSight3
如果您的設計需要繼承友誼,它很好地表明您的設計需要改變。 –
這個功能的用例是什麼?根據你真正想要完成的事情,可能會有其他的選擇,而不是讓所有的課程變得如此友好 –
@David:我將包含一個描述情況的問題的鏈接。 – SSight3