奇怪的私有繼承問題

2021-05-24 22:48:30 字數 416 閱讀 7640

**:

class a

~a()

};class b:private a

~b()

class c: public b

~c()

};報錯:

error c2247: 'a' not accessible because 'b' uses 'private' to inherit from 'a'

問題:c類裡的a屬於外部變數, 不是繼承得來的, 應該可以訪問才對。

補充:可能會有人回答改設計, 為了減少口舌之爭,先說明上面那個類層次的設計緣由。   c類和a類是為了組成裝飾模式,但是為了讓c類專心致志的只做裝飾工作,從而在中間層引進b類,欲通過b類截斷c類任何可以設用自身基類a的函式,從而實現一旦使用c類時,只能老老實實的實現相應的裝飾功能,否則編譯器將不會通過。 

奇怪奇怪的問題

由於需求,我自己寫了乙個mydialog extends dialog 在dialog裡面寫了乙個handler,用來更新dialog上的字。第二次更新介面,需要dialog比第一次變大點。可是dialog在activity裡面顯示,如果activity不掛後台的話,更新很正常。但是我把activi...

類的繼承私有成員問題

類的繼承過程分為公有繼承,保護繼承和私有繼承,無論哪一種繼承,基類的私有成員在派生類成員中都是不可見的,可是基類的私有成員是否被派生類繼承了呢?通過以下實驗即可知道。如下 include using namespace std class base private virtual void f in...

繼承的訪問控制 私有繼承

在私有繼承中,派生類以私有方式繼承基類。基類的公有成員和保護成員在派生類中成為私有成員,它們能被派生類的成員函式直接訪問,但不能被類外函式訪問,也不能在類外通過派生類的物件直接訪問。派生類不能直接訪問基類的私有成員,而只能派生類的成員函式中通過基類的公有或保護成員函式間接訪問。在設計基類時,通常都要...