Наследование реализация

 

Всем привет! Скажите как реализовать наследование и переопределение в классах?


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Params
  {
public:
   string            testParam;
   void              Params(string param) {testParam=param;};
  };

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Strategy
  {
public:
   Params            *indicator;
   void              Strategy(Params *preset) {indicator=preset;};
   void              trade() {Print("Default strategy trade");};
  };

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class StrategyTest: public Strategy
  {
public:
   void              StrategyTest(Params *preset):Strategy(preset) {};
   void              trade() {Print("Test strategy trade");};
  };

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Params *params=new Params("test param");

Strategy *strategy = new StrategyTest(params);

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   strategy.trade();
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+


// Ожидается:
// Test strategy trade

// Но получаю:
// Default strategy trade


Вопрос, как реализовать данную архитектуру, интерфейсы и абстрактные классы не подходят, нет возможности указать общий тип объекта... 

 

в справке хороший пример про наследование и переопределение родительских методов https://www.mql5.com/ru/docs/basis/oop/virtual


не то?

 
Matvey Alekseev:

Всем привет! Скажите как реализовать наследование и переопределение в классах?



Вопрос, как реализовать данную архитектуру, интерфейсы и абстрактные классы не подходят, нет возможности указать общий тип объекта... 

Вам нужно добавить virtual перед функцией 


virtual void              trade() {Print("Default strategy trade");};
 
Igor Makanu:

в справке хороший пример про наследование и переопределение родительских методов https://www.mql5.com/ru/docs/basis/oop/virtual


не то?


Да оно! читал https://docs.mql4.com/ru/basis/types/classes как то неочевидно там всё описано по этому вопросу... обычно делается абстрактными методами, но тут абстрактный класс это прям интерфейс... 


Aleksey Mavrin:

Вам нужно добавить virtual перед функцией 


Да! Спасибо!

Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4