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

mkm*_*afa 7 c++ c++11

class Base {
public:
   virtual void f() {}
};

class Derived : private Base {
public:
   void f() override {}
};
Run Code Online (Sandbox Code Playgroud)

我的问题是这样的覆盖是否有用?私有继承意味着您不能存储DerivedBase指针中,因此永远不需要动态分派f到正确的类型.

ral*_*lfg 7

只有一个例子:一个函数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();
}
Run Code Online (Sandbox Code Playgroud)

输出:

Derived::f() called
Base::f() called
Run Code Online (Sandbox Code Playgroud)