ООП. Вопросы применения - страница 2

 
Urain:

Оператор new создаёт экземпляр класса и в связке с ним идёт вызов конструктора. Это прописано в синтаксисе поэтому по другому вызвать не получится.

Я исходил вот из этого примера:

//+------------------------------------------------------------------+
//| Создание фигуры                                                  |
//+------------------------------------------------------------------+
void CTetrisField::NewShape()
  {
   m_ypos=HORZ_BORDER;
//--- случайным образом создаём одну из 7 возможных фигур
   int nshape=rand()%7;
   switch(nshape)
     {
      case 0: m_shape=new CTetrisShape1; break;
      case 1: m_shape=new CTetrisShape2; break;
      case 2: m_shape=new CTetrisShape3; break;
      case 3: m_shape=new CTetrisShape4; break;
      case 4: m_shape=new CTetrisShape5; break;
      case 5: m_shape=new CTetrisShape6; break;
      case 6: m_shape=new CTetrisShape7; break;
     }
Здесь, грубо говоря, скобок (вызова конструктора) нет. Возможно, что я чего-то пока недопонимаю.
 
Urain:

Вот этот код почти ничем от множественного наследования не отличается.

Фактически класс С_С через соответствующие указатели имеет доступ к данным С_А и С_В.


Это называется агрегация
 
Yedelkin:

Я исходил вот из этого примера:

Здесь, грубо говоря, скобок (вызова конструктора) нет. Возможно, что я чего-то пока недопонимаю.

 

А чё сразу я, это не ко мне, это в центральную прачечную, я скобки не брал :о)
 
Urain:
А чё сразу я, это не ко мне, это в центральную прачечную, я скобки не брал :о)

У меня компилятор на отсутствие скобок не ругается...

      case  50: d_Control=new CControl_50; break;

 В общем, неожиданно возник вопрос: а как правильно? Или без разницы, есть скобки или нет?

 
Yedelkin:

У меня компилятор на отсутствие скобок не ругается...

 В общем, неожиданно возник вопрос: а как правильно? Или без разницы, есть скобки или нет?

Если работает и так и так то это скорее вопросы унификации синтаксиса. Главное чтоб на скорость не влияло.

ЗЫ А так вообще работает?  чесно говоря я не проверял, я всегда пишу со скобками.

 
Urain:

Если работает и так и так то это скорее вопросы унификации синтаксиса. Главное чтоб на скорость не влияло.

ЗЫ А так вообще работает?  чесно говоря я не проверял, я всегда пишу со скобками.

Пока я могу говорить только про результаты компиляции. До проверки реальной работы кода ещё далеко.
 

Не читал описание создание динамически объектов классов в MQL5, но в С++ можно и без скобок (вызывается стандартный конструктор), и со скобками (вызывается конструктор в зависимости от параметров в скобках). Пример:


class CExample
{
    int param;
public:
    CExample();
    CExample(int x);
    ~CExample();
}

CExample::CExample(int x)
{
    param = x;
}

//..........вызов..............
//..где-то в тексте программы..

   CExample *ex1 = new CExample;         //создание с конструктором CExample();
   CExample *ex1 = new CExample();       //создание с конструктором CExample();
   CExample *ex1 = new CExample(value);  //создание с конструктором CExample(int x);

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
В mql5 в конструктор нельзя передавать параметры.
 
Vigor:
В mql5 в конструктор нельзя передавать параметры.

уточним " В mql5 в конструктор пока нельзя передавать параметры."
 
PiramidaR:

Не читал описание создание динамически объектов классов в MQL5, но в С++ можно и без скобок (вызывается стандартный конструктор), и со скобками (вызывается конструктор в зависимости от параметров в скобках). Пример:

Понял, спасибо за простое и понятное разъяснение. Получается, что скобки - это для возможных параметров.

А описание создания  динамических объектов  классов в MQL5 очень лаконичное:

Справочник MQL5 / Основы языка / Операторы / Оператор создания объекта new 

Справочник MQL5 / Основы языка / Типы данных / Указатели объектов

Причина обращения: