![](/img/trans.png)
[英]C++: Creating derived class that has access to private variables of base?
[英]c++ derived class with private access specifier
我有一個從基類(類A)派生的類(類B)。 類A具有受保護的虛函數foo(),我想重寫它並將其用作派生類中的私有函數。
Class A{
protected:
virtual void foo() = 0;
}
我想知道以下情況
Class B: public Class A
private:
virtual void foo();
和
Class B: private Class A
private:
virtual void foo();
是相同的。
她們不一樣。 在第一個示例中, B
是-an - A
,在第二個示例中不是。 因此,在第一種情況下,您可以使用如下代碼
void foo(const A& a);
接受A
和B
作為參數。 使用私有繼承,您將無法做到這一點。 例如,
A a;
B b;
foo(a); // OK with private and public inheritance
foo(b); // OK only with public inheritance, i.e. B is an A.
不,您的兩種情況不一樣。
在第二種情況下,無法將class B
強制轉換為class A
,因為私有基類被隱藏了。 在這方面,將獲得與class A
將成為class B
的成員相同的行為。
兩者都不相同在公共繼承類A中,foo()將被保護為類B中的成員。在私有繼承中,類B僅可以訪問類A的公共成員,因此在類B中將不會出現任何類A的foo()。 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.