PLO - page 8

 

Comment retourner une référence dans les paramètres d'une fonction ?

Ce type de code pose des problèmes :

CMy* obj; // global
bool func(CMy* obj)
{
...
  obj = new CMy();
...
}

Accèsinvalide aupointeur lors de l'utilisation de l'objet.

J'ai essayé d'ajouter un &.

bool func(CMy*& obj)

Ça marche. Je n'ai pas trouvé la référence retour dans les paramètres de la fonction dans la documentation.

Par analogie, j'ai trouvé ce sujet en C++ : http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Mais ** ne fonctionne pas ici. *& au lieu de ça ?

5.00.630 x64

returning a pointer as a function parameter
returning a pointer as a function parameter
  • stackoverflow.com
Im trying to return the data pointer from the function parameter: bool dosomething(char *data){ int datasize = 100; data = (char *)malloc(datasize); // here data address = 10968998
 
flops:

Je n'ai pas trouvé de référence de retour dans les paramètres de la fonction dans la documentation.

Tu veux dire ça : Référence MQL5 / Notions de base du langage / Types de données / Références. Le modificateur & et le mot-clé this?
 
flops:

Comment retourner une référence dans les paramètres d'une fonction ?

Ce type de code pose des problèmes :

Accès invalide au pointeur lors de l'utilisation de l'objet.

J'ai essayé d'ajouter un &.

Ça marche. Je n'ai pas trouvé la référence retour dans les paramètres des fonctions dans la documentation.

Par analogie, j'ai trouvé ce sujet en C++ : http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Mais votre ** ne fonctionne pas. *& au lieu de ça ?

5.00.630 x64

IMHO (c'était il y a longtemps).

Vous ne pouvez pas passer un pointeur dans les arguments mais créer une référence. Vous ne pouvez pas lier une nouvelle instance d'une classe à une référence. Il reste donc la voie suivante :

CMy* func()
{
...
  CMy* obj;
  obj = new CMy();
  return(obj);
...
}
 
Vigor:

Je suis un partisan de la POO, car j'ai compris l'intérêt de programmer de bas en haut. Des interfaces d'interaction avec les objets à la mise en œuvre des classes.

Une interface n'est-elle pas externe à une classe ?
 
220Volt:

IMHO (c'était il y a longtemps).

Vous ne pouvez pas passer un pointeur à travers les arguments, vous pouvez créer une référence. Vous ne pouvez pas lier une nouvelle instance de la classe à une référence. Ce qui nous laisse avec cette option :

J'ai mal défini la question.

Passage d'un pointeur par référence. Je me demande si l'on peut utiliser la variante *& et si elle ne sera pas couverte dans les versions ultérieures ? En C++, une telle construction semble être légale.

 
Yedelkin:
Vous y faites référence : Guide de référence MQL5 / Notions de base du langage / Types de données / Références. Le modificateur & et le mot-clé this?

J'aimerais qu'il y ait la bonne information...


Dans l'article

https://www.mql5.com/ru/docs/basis/function/ParameterPass

vous pouvez également ajouter des informations sur le travail avec les objets.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Andrei01:
Une interface n'est-elle pas externe à la classe ?

Quelle différence cela fait-il pour les objets ? Dans cette interprétation, une interface est un type de données, car sa description définit assez clairement les propriétés des objets. Et, en fait, elle définit le comportement extérieur des objets.

Dans les documents que j'ai cités, les opposants à la POO mentionnent qu'il est impossible de créer immédiatement la structure de classe sans implémenter l'algorithme, ce qui explique pourquoi l'environnement POO a si souvent pratiqué le refactoring et pourquoi les classes entravent le développement avec leur éternel remaniement. Et c'est vraiment vrai. Lorsque vous mettez en œuvre quelque chose de nouveau et que vous ne comprenez pas à quoi cela peut mener, vous devez refaire des cours et plus d'une fois.

La création d'une bonne architecture de classe est une pierre d'achoppement pour les débutants. En substance, l'intérêt de la programmation OOP est d'écrire votre propre"langage", un langage facile et rapide à créer dans le futur. L'interface est l'essence d'un langage qui est conçu pour la tâche. L'interface, en effet, ne doit pas être comprise comme une construction "de type" de la classe, comme un contrat pour la classe, qui doit être exécuté en code (en MQL, il n'existe pas et le rôle d'interface peut être faiblement rempli par des méthodes virtuelles).

Par exemple, vous pouvez créer un "langage" pour la création de nouvelles EE qui vous permet d'assembler le schéma général des EE à partir d'objets en quelques lignes. Les signaux et les conditions peuvent être utilisés prêts à l'emploi, ou vous pouvez développer vos propres classes de signaux et créer votre propre bibliothèque par analogie. Cette possibilité est offerte par l'assistant MQL5.

Souvent, le schéma de l'application a déjà été développé et la "programmation OOP" se résume essentiellement à l'utilisation de classes existantes avec des degrés de liberté limités pour écrire votre propre fonctionnalité - c'est pratique. C'est pourquoi les frameworks sont si populaires. Ils éliminent les problèmes et les maux de tête inutiles lors du développement de l'architecture de l'application. En fait, écrire quelque chose de votre cru consiste à créer une classe héritière de l'une des classes du framework et à y écrire l'implémentation de certaines méthodes du backend, qui sont déjà intégrées dans la logique globale de l'application (OnInit, OnTick, par exemple).

 
Vigor:

...

La création d'une architecture de classe compétente est une pierre d'achoppement pour les débutants. En substance, le sens de la programmation OOP est d'écrire son propre"langage", un langage sur lequel il est pratique et rapide de créer ultérieurement. L'interface est l'essence d'un langage qui est conçu pour la tâche. L'interface ne doit pas être comprise comme une construction de "type" de la classe, comme un contrat pour la classe, qui doit être exécuté en code (en MQL, elle n'existe pas, et le rôle de l'interface peut être validé par des méthodes virtuelles).

...

L'intérêt de la POO est plutôt d'écrire sa propre architecture. Dès que nous disposons d'une architecture bien définie, claire et intuitive, tout se met en place et ni la complexité ni le volume du projet ne sont des facteurs contraignants. Cependant, pour réaliser cette architecture très claire, il faut réécrire les classes une à une pour se rapprocher de cet idéal initialement vague.
 
C-4:
Au contraire, le but de la POO est d'écrire votre propre architecture. Dès que nous disposons d'une architecture claire, concise et intuitive, tout se met en place et ni la complexité du projet ni son ampleur ne sont plus des facteurs contraignants. Cependant, pour obtenir cette architecture très claire, il faut réécrire les classes une par une pour se rapprocher de cet idéal initialement vague.
+1
Raison: