为什么要在私有继承下覆盖

Why override under private inheritance?

本文关键字:继承 覆盖 为什么      更新时间:2023-10-16
class Base {
public:
   virtual void f() {}
};
class Derived : private Base {
public:
   void f() override {}
};

我的问题是这种覆盖有什么用吗?私有继承意味着不能将Derived存储在指针Base因此永远不需要将f动态调度到正确的类型。

举个例子:Derived::f1()函数可以调用Base::f2()的(公共或受保护(函数,而又可以调用f()。在这种情况下,需要动态调度。

下面是一个示例代码:

#include "iostream"
using namespace std;
class Base {
  public:
    virtual void f()  { 
      cout << "Base::f() called.n"; 
    }
    void f2() { 
      f(); // Here, a dynamic dispatch is done!
    }
};
class Derived:private Base {
  public:
    void f() override { 
      cout << "Derived::f() called.n"; 
    }
    void f1() { 
      Base::f2(); 
    }
};
int main() {
  Derived D;
  D.f1();
  Base    B;
  B.f2();
}

输出:

Derived::f() called
Base::f() called