我已经在SO上查看了有关此主题的多个问题以及一些参考文献,并且没有看到这个问题出现在任何地方。
当我的Derived
实例调用Base::GetValue()
(调用virtual
和doGetValue()
中定义的Derived
Base
时,{ {1}}被调用而不是Base::doGetValue()
。为什么这样做,我需要做些什么呢?
是因为Derived::doGetValue()
是Derived::doGetValue()
而不是private
吗?在我看来,这似乎是最可能的解释,但我没有看到在我到目前为止所看到的任何地方都明确说过。
Here是我在coliru上的代码。
以下是我的代码:
protected
我试图包含我的问题的所有细节,不包括编译器的一些delphi继承功能(RAD Studio XE4)。
答案 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;
在基础中,该功能不是虚拟的。