1

我有一个来自基类(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();

是相同的。

4

3 回答 3

1

他们不一样。在第一个例子中,B is-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.
于 2013-10-14T13:07:13.610 回答
0

不,你的两种情况不一样。

在第二种情况下class B,不能强制转换为class A,因为私有基类是隐藏的。class A在这方面将获得与 .的成员相同的行为class B

于 2013-10-14T13:11:33.563 回答
0

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

于 2013-10-14T13:38:10.837 回答