Передать параметры при создании экземпляра дочернего класса mql

22 января 2021 г. 1:22

Если в базовом классе есть конструктор с параметрами, то при создании дочернего класса нужно добавить конструктор с передачей параметров в базовый класс.

Для наглядности сначала покажу пример без использования параметров в конструкторе:

class Base {
   public:
      void Base(){
         Print("Base: constructor is called");
      };
};

class Child : public Base {
   public:
      void Child(){
         Print("Child: constructor is called");
      };
};

В терминале во вкладке "Терминал \ Эксперты" мы видим результат выполнения кода:

2021.01.22 13:07:04.756    TestBot EURCHF,H1: Child: constructor is called
2021.01.22 13:07:04.756    TestBot EURCHF,H1: Base: constructor is called

Видно, что сначала выполнился код базового конструктора, а затем дочернего.

Если честно, меня удивило, что при инициализации объекта child конструктор класса Child не переопределил конструктор класса Base. Разным кодом я пытался переопределить базовый класс, но увы, у меня не получилось. Если кто знает, как это делается, напишите в комментариях - буду признателен!

Чтобы использовать дочерний класс нужно, во-первых использовать конструктор. Без него не будет работать, например:

class Base {
   public:
      void Base(string text) {
         Print("Base: constructor is called. text = " + text);
      };
};

class Child : public Base {
   public:

      void func() {
         Print("Child: func() is called");
      };
};

Child child("xxx");

Возникнет ошибка: 'Child' - wrong parameters count.

А во-вторых, при описании конструктора дочернего класса использовать следующую конструкцию: void Child(string text) : Base(text) {...}:

class Base {
   public:
      void Base(string text) {
         Print("Base: constructor is called. text = " + text);
      };
};

class Child : public Base {
   public:

      void Child(string text) : Base(text){};
      void func() {
          Print("Child: func() is called");
      };
};

Child child("xxx");
child.func()

// Результат выполнения кода:
Base: constructor is called. text = xxx
Child: func() is called

Если при создании дочернего объекта нужно выполнить какой-то код, то его нужно поместить в фигурные скобки в теле конструктора:

class Base {
   public:
      void Base(string text) {
         Print("Base: constructor is called. text = " + text);
      };
};

class Child : public Base {
   public:

      void Child(string text) : Base(text){
         Print("Child: constructor is called. text = " + text);
      };
      void func() {
          Print("Child: func() is called");
      };
};

Child child("xxx");
child.func()

// Результат выполнения кода:
Base: constructor is called. text = xxx
Child: constructor is called. text = xxx
Child: func() is called

Оцените статью

0 из 5 (всего 0 оценок)

captcha
Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Мальцев Артём

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/it/providing-parameters-to-child-class/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="https://vivazzi.pro/it/providing-parameters-to-child-class/">https://vivazzi.pro/it/providing-parameters-to-child-class/</a>

Подробнее: Правила использования сайта

Комментариев: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментрирования от своего имени, войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц