OLP. Problemi di applicazione - pagina 2

 
Urain:

L'operatore new crea un'istanza della classe e un costruttore viene chiamato insieme ad esso. È scritto nella sintassi, quindi non si può chiamare in altro modo.

Ho proceduto da questo esempio:

//+------------------------------------------------------------------+
//| Создание фигуры                                                  |
//+------------------------------------------------------------------+
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;
     }
In parole povere, qui non ci sono parentesi (chiamata al costruttore). È possibile che mi manchi ancora qualcosa.
 
Urain:

Questo codice non è quasi diverso dall'ereditarietà multipla.

Infatti, la classe C_C ha accesso ai dati C_A e C_B attraverso puntatori appropriati.


Questo si chiama aggregazione
 
Yedelkin:

Mi sono basato su questo esempio:

Qui, grosso modo, non ci sono parentesi (chiamate al costruttore). È possibile che io non capisca ancora qualcosa.

Perché io, non è per me, è per la lavanderia centrale, non ho preso staffe :o)
 
Urain:
Perché io, non è per me, è per la lavanderia centrale, non ho usato le parentesi :o)

Il mio compilatore non si lamenta delle parentesi mancanti...

      case  50: d_Control=new CControl_50; break;

Comunque, è sorta improvvisamente una domanda: qual è il modo giusto? O non fa differenza se ci sono le parentesi o no?

 
Yedelkin:

Il mio compilatore non si lamenta delle parentesi mancanti...

Comunque, è sorta improvvisamente una domanda: qual è il modo giusto? O non fa differenza se ci sono le parentesi o no?

Se funziona in entrambi i modi, è piuttosto una questione di unificazione della sintassi. La cosa principale è che non influisce sulla velocità.

ZS E funziona? Per essere onesto non ho controllato, scrivo sempre con le parentesi.

 
Urain:

Se funziona in entrambi i modi, è più una questione di unificazione della sintassi. La cosa principale è non influenzare la velocità.

ZS Funziona? Per essere onesto non ho controllato, scrivo sempre con le parentesi.

Finora posso parlare solo di risultati di compilazione. C'è ancora molta strada da fare per verificare se il codice funziona davvero.
 

Non ho letto la descrizione della creazione di oggetti di classe dinamicamente in MQL5, ma in C++ si può fare senza parentesi (viene chiamato il costruttore standard) e con parentesi (il costruttore viene chiamato a seconda dei parametri tra parentesi). Esempio:


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
 
In mql5, non si possono passare parametri al costruttore.
 
Vigor:
In mql5 non si possono ancora passare parametri al costruttore.

chiarire " In mql5 non si possono ancora passare parametri al costruttore".
 
PiramidaR:

Non ho letto la descrizione della creazione di oggetti di classe dinamicamente in MQL5, ma in C++ si può fare senza parentesi (viene chiamato il costruttore standard) e con parentesi (il costruttore viene chiamato a seconda dei parametri tra parentesi). Esempio:

Capito, grazie per la spiegazione semplice e diretta. Si scopre che le parentesi sono per i parametri possibili.

E la descrizione di come creare oggetti dinamici di classe in MQL5 è molto concisa:

Riferimento MQL5 / Fondamenti del linguaggio / Operatori / Operatore di creazione di un oggetto nuovo

Riferimento MQL5 / Fondamenti del linguaggio / Tipi di dati / Puntatori a oggetti

Motivazione: