OLP. Problèmes d'application - page 2

 
Urain:

L'opérateur new crée une instance de la classe et un constructeur est appelé en conjonction avec lui. Il est écrit dans la syntaxe, il n'y a donc pas d'autre moyen de l'appeler.

J'ai procédé à partir de cet exemple :

//+------------------------------------------------------------------+
//| Создание фигуры                                                  |
//+------------------------------------------------------------------+
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;
     }
En gros, il n'y a pas de parenthèses (appel au constructeur) ici. Il est possible que je manque encore quelque chose.
 
Urain:

Ce code n'est pratiquement pas différent de l'héritage multiple.

En fait, la classe C_C a accès aux données de C_A et C_B par le biais de pointeurs appropriés.


C'est ce qu'on appelle l'agrégation
 
Yedelkin:

Je me suis basé sur cet exemple :

Ici, en gros, il n'y a pas de parenthèses (appels de constructeurs). Il est possible que je ne comprenne pas encore quelque chose.

Pourquoi moi, ce n'est pas pour moi, c'est pour la laverie centrale, je n'ai pas pris de crochets :o)
 
Urain:
Pourquoi moi, ce n'est pas pour moi, c'est pour la laverie centrale, je n'ai pas utilisé de parenthèses :o)

Mon compilateur ne se plaint pas des parenthèses manquantes...

      case  50: d_Control=new CControl_50; break;

Quoi qu'il en soit, une question s'est soudain posée : quelle est la bonne méthode ? Ou bien cela ne fait aucune différence qu'il y ait des crochets ou non ?

 
Yedelkin:

Mon compilateur ne se plaint pas des parenthèses manquantes...

Quoi qu'il en soit, une question s'est soudain posée : quelle est la bonne méthode ? Ou bien cela ne fait aucune différence qu'il y ait des crochets ou non ?

Si cela fonctionne dans les deux sens, il s'agit plutôt d'une question d'unification de la syntaxe. L'essentiel est que cela n'affecte pas la vitesse.

ZS Et cela fonctionne-t-il ? Pour être honnête, je n'ai pas vérifié, j'écris toujours avec des parenthèses.

 
Urain:

Si cela fonctionne dans les deux sens, c'est plutôt une question d'unification de la syntaxe. L'essentiel est de ne pas affecter la vitesse.

ZS Cela fonctionne-t-il ? Pour être honnête, je n'ai pas vérifié, j'écris toujours avec des parenthèses.

Jusqu'à présent, je ne peux parler que des résultats de la compilation. Il reste encore un long chemin à parcourir pour vérifier si le code fonctionne réellement.
 

Je n'ai pas lu la description de la création dynamique d'objets de classe dans MQL5, mais en C++ vous pouvez le faire sans crochets (le constructeur standard est appelé) et avec crochets (le constructeur est appelé en fonction des paramètres entre crochets). Exemple :


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
 
Dans mql5, vous ne pouvez pas passer de paramètres au constructeur.
 
Vigor:
Dans mql5, aucun paramètre ne peut encore être passé au constructeur.

clarifier " Dans mql5 aucun paramètre ne peut encore être passé au constructeur".
 
PiramidaR:

Je n'ai pas lu la description de la création dynamique d'objets de classe dans MQL5, mais en C++ vous pouvez le faire sans crochets (le constructeur standard est appelé) et avec crochets (le constructeur est appelé en fonction des paramètres entre crochets). Exemple :

Compris, merci pour cette explication simple et directe. Il s'avère que les parenthèses sont destinées aux paramètres éventuels.

Et la description de la manière de créer des objets de classe dynamiques dans MQL5 est très concise :

Référence MQL5 / Notions de base du langage / Opérateurs / Opérateur de création d'objet new

Référence MQL5 / Notions de base du langage / Types de données / Pointeurs d'objets

Raison: