簡體   English   中英

具有私有訪問說明符的c ++派生類

[英]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);

接受AB作為參數。 使用私有繼承,您將無法做到這一點。 例如,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM