基类函数不调用派生类函数

时间:2013-12-13 18:48:40

标签: c++ inheritance polymorphism virtual-functions

我已经在SO上查看了有关此主题的多个问题以及一些参考文献,并且没有看到这个问题出现在任何地方。

当我的Derived实例调用Base::GetValue()(调用virtualdoGetValue()中定义的Derived Base时,{ {1}}被调用而不是Base::doGetValue()。为什么这样做,我需要做些什么呢?

是因为Derived::doGetValue()Derived::doGetValue()而不是private吗?在我看来,这似乎是最可能的解释,但我没有看到在我到目前为止所看到的任何地方都明确说过。

Here是我在coliru上的代码。

以下是我的代码:

protected

我试图包含我的问题的所有细节,不包括编译器的一些delphi继承功能(RAD Studio XE4)。

1 个答案:

答案 0 :(得分:2)

doGetValue的定义在base和derived之间是不同的。

基地:

virtual void        doGetValue( map<string,string> &ds, const bool include ) const;
inline void         doGetValue( map<string,string> &ds ) const { doGetValue(ds, true); };

派生:

virtual void        doGetValue( map<string,string> &ds ) const;

在基础中,该功能不是虚拟的。