c 友元關係與繼承

2021-09-06 08:20:58 字數 482 閱讀 4172

友元關係不能繼承。基類的友元對派生類的成員沒有特殊訪問許可權。

如果基類被授予友元關係,則只有基類具有特殊訪問許可權,該基類的派生類不能訪問授予友元關係的類。

class

base

//frnd has no access to members in d1

class d1 : public

base

;class

frnd

//ok: frnd is friend to base

int mem(d1 d) //

error: friendship doesn』t inherit

};//

d2 has no access to members in base

class d2 : public

frnd

//error: friendship doesn』t inherit

};

友元關係可以繼承 友元不能繼承

看這一段 struct顯然是編譯不過的,原因如題 友元關係不能繼承。但考慮這麼乙個情景 你想構建任意多的擴充套件去豐富b的功能,而這些擴充套件要用到b的一些非公開方法。既然是非公開,那就得友元了,但是擴充套件的類名你又不知道。最直觀的想法就是建立乙個擴充套件基類a,a是已知的,可以讓a成為b的友元。...

C 友元關係

在封裝中c 類資料成員大多情況是private屬性 但是如果介面採用多引數實現肯定影響程式效率 然而這時候如果外界需要頻繁訪問這些私有成員,就不得不需要乙個既安全又理想的 後門 友元關係 c 中提供三種友元關係的實現方式,友元函式 友元成員函式 友元類。友元函式 既將乙個普通的函式在乙個類中說明為乙...

C 友元關係

在c 中,當基類a,給與屬性protected限定時,如果想訪問該屬性,除了繼承的子類外,可在a類中宣告b類為a的友元 如13行 friend class others 友元類 friend class名 不是物件 使得友元類可以使用該類的 當a類中定義b為a的友元類,則類b可以使用a的方法和屬性 ...