我的代码:

#include <iostream>
using namespace std;
class Base
{
public:
    void print() { doPrint();}
private:
    virtual void doPrint() {cout << "Base::doPrint" << endl;}
};

class Derived : public Base
{
private:
    virtual void doPrint() {cout << "Derived::doPrint" << endl;}
};

int main()
{
    Derived *d = new Derived();
    Base* p = dynamic_cast<Base*>(d);
    p->print();
    delete d;
    return 0;
}


输出是Derived::doPrint,我不太清楚答案。为什么不Base::doPrint?在公共继承中,为什么基类可以调用派生类的私有虚拟函数?

最佳答案

虚拟将告诉它检查要调用的函数。它仍然知道它是一个Derived。如果您未放入virtual,则此操作将无效。阅读有关多态的更多信息。

09-06 15:33