Тема "ООП" вылилась в обмен мнениями типа "хорошо или не очень". Хотелось бы ответов на более приземлённые вопросы.
Вопрос такой. В учебнике по С++ встречал упоминание о том, что экземпляр класса можно сделать потомком одновременно двух разных классов-родителей, типа
Или что-то в этом роде (найти источник не могу). А как обстоят дела с этим в MQL5? Можно ли объявить, что класс является потомком одновременно двух разных классов-родителей? Каков синтаксис?
Фраза из Справочника: "Нет множественного наследования" - это не о такой ситуации?
В MQL5 множественное наследование не поддерживается но есть интересный механизм передачи указателя объекта через который можно реализовать что то наподобии.
С ООП оказалось очень удобно структурировать код (пардон за банальность). Берешь и штампуешь методы один за другим. Очень эффективно и наглядно. Но возник вопрос, не сказывается ли такая многообёрточность на скорости обработки кода процессором? Если конкретно, то имеется ли какая-нибудь разница в скорости выполнения между вот такими двумя вариантами кода:
double ddd=0.0; //первый вариант кода, инициализация без применения функций/методов double ddd; //второй вариант кода, инициализация с применением функций/методов void function(double a) { a=0.0; } ... function(ddd);
Или же на стадии компиляции код преобразуется с человеческого на машинный язык так, что для компьютера оба эти варианта ничем не отличаются по скорости обработки?
В MQL5 множественное наследование не поддерживается ...
Т.е. "множественное наследование" - это и есть множественность родителей?
Т.е. "множественное наследование" - это и есть множественность родителей?
Да именно у класса может быть один родитель, каскадно можно, но двух родителей и mql5 не может быть.
В принципе вместо наследования можно вызвать класс-"типа как родитель" в самом классе и обращаться к данным "типа как родителя" через его указатель.
Да именно у класса может быть один родитель, каскадно можно, но двух родителей и mql5 не может быть.
Вот этот код почти ничем от множественного наследования не отличается.
class C_A { public: C_A(void){}; ~C_A(void){}; double a; }; //+------------------------------------------------------------------+ class C_B { public: C_B(void){}; ~C_B(void){}; double b; }; //+------------------------------------------------------------------+ class C_C { public: C_A *ua; C_B *ub; C_C(void){ua=new C_A();ub=new C_B();}; ~C_C(void){delete ua;delete ub;}; }; //+------------------------------------------------------------------+Фактически класс С_С через соответствующие указатели имеет доступ к данным С_А и С_В.
Вот этот код почти ничем от множественного наследования не отличается.
Фактически класс С_С через соответствующие указатели имеет доступ к данным С_А и С_В.Круто! Я бы не додумался создавать в конструкторе экземпляр внешнего класса. Спасибо за помощь!
Дополнение. А вот в этой строчке
C_C(void){ua=new C_A();ub=new C_B();};
оператор new применяется к конструктору C_A() класса C_A.
Из Справочника же я понял, что у оператора new операндом выступает сам класс, а не его конструктор. Какие тут могут быть особенности?
Кстати, через некоторое время у конструкторов будут работать параметры, что сильно упростит жизнь разработчикам.
Круто! Я бы не додумался создавать в конструкторе экземпляр внешнего класса. Спасибо за помощь!
Дополнение. А вот в этой строчке
оператор new применяется к конструктору C_A() класса C_A.
Из Справочника же я понял, что у оператора new операндом выступает сам класс, а не его конструктор. Какие тут могут быть особенности?
Оператор new создаёт экземпляр класса и в связке с ним идёт вызов конструктора. Это прописано в синтаксисе поэтому по другому вызвать не получится.
В статичном объявлении всё происходит автоматически.
Вот так кстати тоже будет работать и автоматически уничтожаться
class C_C { public: C_A ua; C_B ub; C_C(void){}; ~C_C(void){}; }; //+------------------------------------------------------------------+
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Тема "ООП" вылилась в обмен мнениями типа "хорошо или не очень". Хотелось бы ответов на более приземлённые вопросы.
Вопрос такой. В учебнике по С++ встречал упоминание о том, что экземпляр класса можно сделать потомком одновременно двух разных классов-родителей, типа
Или что-то в этом роде (найти источник не могу). А как обстоят дела с этим в MQL5? Можно ли объявить, что класс является потомком одновременно двух разных классов-родителей? Каков синтаксис?
Фраза из Справочника: "Нет множественного наследования" - это не о такой ситуации?