2011-04-23 51 views
1

我有這樣的設置:如何跳過一個具有公共訪問功能的類?

class A 
{ 
    public: 
    virtual void Function(); 
} 

class B : private A 
{ 

} 

class C : public B 
{ 
public: 
// I want to expose A::Function() here 
} 

我試圖通過添加要做到這一點:

class C : public B 
{ 
public: 
    virtual void Function(); 
} 

C::Function() 
{ 
    A::Function(); 
} 

但我得到和 「不可接近基地」 的錯誤。

是否有可能做到這樣的事情?

回答

5

B可以的A::Function無障礙更改爲protected

class B : private A 
{ 
protected: 
    using A::Function; 
}; 

C::Function(和其他地方C),你便要參閱功能B::Function,不A::Function。您也可以在C中使用public: using B::Function;,而不是實施C::Function,該號碼僅調用B::Function

1

如果你可以改變它class B : protected A它應該工作。

3

你不能這樣做。 BA繼承的事實是一個實現細節,您不允許從C訪問它 - 就像您無法訪問B的私有函數或成員變量一樣。

這將是完全合法的,如果B繼承protectedpublic從A

0

不是真的。你所描述的場景會表明你的類層次結構需要重新設計。

相關問題