带有私有访问说明符的c ++派生类

时间:2013-10-14 13:05:34

标签: c++ 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();

是一样的。

3 个答案:

答案 0 :(得分:1)

他们不一样。在第一个示例中,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.

答案 1 :(得分:0)

不,你的两个案子不一样。

在第二种情况下,class B无法转换为class A,因为隐藏了私有基类。在这方面会得到与class A成为class B成员时相同的行为。

答案 2 :(得分:0)

两者都不相同 在公共继承类A中,foo()将成为B类中的受保护成员 在私有继承中,类B只能访问类A的公共成员,因此在类B中不会出现类A的任何foo()。