类,从父类调用与子类同名的方法

问题描述

我正面临一个相当令人沮丧的挑战。考虑以下几点:

  • CAdmin 是父类
  • CNotify 继承了 CAdmin,因此,它是 CAdmin 的子代。
  • 两个类都有一个名为 Function(void) 的函数
  • Function(void) 的 CAdmin 声明是虚拟的。
  • CNotify 声明的 Function(void) 不是虚拟的。

给定以下代码(在 OnStart() / OnInit() / OnTick() / OnDeinit() 或类似中使用):

CNotify notify;

notify.Function(); // Prints from CNotify
notify.CAdmin::Function(); // Error,want to call the method with name Function but in CAdmin,which is inhereted into CNotify

以及以下两个类的声明:

class CAdmin
{
// ---

// === Public ===

   public:

// --- Functions ---
                    
      CAdmin(void);
      ~CAdmin(void);
     
      virtual void Function() { Print("CAdmin"); }
      
// ---      
};

class CNotify : public CAdmin
{
// ---

// === Public ===

   public:

// --- Functions ---
     
      CNotify(void);
      ~CNotify(void);

      void Function() { Print("CNotify"); }
      
// ---    
};

鉴于我只创建了一个 CNotify 类型的对象,如何正确调用 Function() 的 CAdmin 版本而不是 CNotify?

我知道它可以通过重命名方法解决,或者只是通过在子版本中使用父版本而不是从实际的对象创建中使用它,但是,我想知道是否像上面提到的那样可以在 MQL4 或 MQL5 中实现。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)