在C ++中,公共继承基类调用派生类的私有虚拟功能

战斗机

我的代码:

#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这将不起作用。阅读有关多态的更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

即使它们是私有的,基类的好友函数如何调用派生类的重写虚拟函数?(C ++)

在C#中从派生类调用私有基方法

C ++继承:指向基类的派生类指针调用派生类方法

重写派生类C ++中基类私有成员的行为

在C ++继承中,当指向基类的指针对象指向派生类时,不调用派生类析构函数

C ++多态性:派生类调用基类虚拟函数,而不是重写的派生类

如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

C ++继承:使用派生类的实例调用基类的虚函数

为什么派生类的构造函数要在C ++中初始化虚拟基类?

为C ++中的基类和派生类声明“虚拟”构造函数?

C++ 继承(在基类中实例化派生类)

C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

C#-在派生类中调用基类和类构造函数

C ++类继承在派生类中的单独方法

C ++如何从多个派生类调用基类方法?

C ++:在派生类成员上调用基类方法

c#:调用继承的基本方法时的控制流,该方法又调用了在派生类中设置为新的基本虚拟方法

您能否将派生类添加到其基类的列表中,然后从C#中的基类列表中调用派生类的方法

访问派生类C ++的私有成员

有关在派生类的基础上实现的C ++调用虚拟函数的问题

在派生类 C++ 的构造函数中调用基类的构造函数

如何在C ++中从基类构造函数调用派生类方法?

从基类类型的指针数组中调用派生类的方法。(C ++)

C# 可以让基类中的泛型函数知道调用派生类的类型吗?

无法在C ++的派生类中重载基类方法

C ++替换派生类中的基类

C ++:使用基类中的仅派生类变量

嵌套在基类中的派生类 - C++

基类和派生类C ++