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

22 января 2021 г. 6: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/ru/it/providing-parameters-to-child-class/:

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

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

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

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

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

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

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

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

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

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

Попробуйте

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