PLO - página 8

 

¿Cómo devuelvo una referencia en los parámetros de una función?

Este tipo de código causa problemas:

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

Acceso depuntero inválido al intentar trabajar con obj.

He intentado añadir un &.

bool func(CMy*& obj)

Funciona. No he encontrado en la documentación la devolución de la referencia en los parámetros de la función.

Por analogía, encontré este tema en C++: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Pero ** no funciona aquí. *& en lugar de eso?

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:

No he podido encontrar en la documentación un retorno de referencia en los parámetros de la función.

Te refieres a esto: Referencia MQL5 / Conceptos básicos del lenguaje / Tipos de datos / Referencias. Modificador & y palabra clave este?
 
flops:

¿Cómo devuelvo una referencia en los parámetros de una función?

Este tipo de código causa problemas:

Acceso inválido al puntero cuando se intenta trabajar con obj.

He intentado añadir un &.

Funciona. No he encontrado en la documentación la devolución de la referencia en los parámetros de la función.

Por analogía, encontré este tema en C++: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Pero tu ** no funciona. *& en lugar de eso?

5.00.630 x64

IMHO (fue hace mucho tiempo).

No se puede pasar un puntero a través de los argumentos, sino crear una referencia. No se puede vincular una nueva instancia de una clase a una referencia. Queda el siguiente camino:

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

Soy partidario de la POO, porque he comprendido la conveniencia de programar de abajo arriba. De las interfaces de interacción de objetos a la implementación de clases.

¿No es una interfaz externa a una clase?
 
220Volt:

IMHO (fue hace mucho tiempo).

No se puede pasar un puntero a través de los argumentos, se puede crear una referencia. No se puede adjuntar una nueva instancia de la clase a la referencia. Eso nos deja con esta opción:

He definido mal la pregunta.

Pasar un puntero por referencia. Me pregunto si se puede usar la variante *& y si no lo cubrirán en versiones posteriores. En C++, esta construcción parece ser legal.

 
Yedelkin:
Se está refiriendo a ello: Guía de referencia de MQL5 / Conceptos básicos del lenguaje / Tipos de datos / Referencias. Modificador & y palabra clave este?

Me gustaría que hubiera la información adecuada...


En el artículo

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

también puede añadir información sobre el trabajo con objetos.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Andrei01:
¿No es una interfaz externa a la clase?

¿Qué diferencia hay entre los objetos? Una interfaz en esta interpretación es un tipo de datos, porque su descripción define con suficiente claridad las propiedades de los objetos. Y, de hecho, define el comportamiento externo de los objetos.

En los materiales que cité, los opositores a la POO mencionaron que es imposible crear la estructura de clases inmediatamente sin implementar el algoritmo, razón por la que el entorno de la POO practica tan a menudo la refactorización y por la que las clases obstaculizan el desarrollo con su eterno rediseño. Y esto es realmente cierto. Cuando se implementa algo nuevo y no se entiende a qué puede llevar, hay que rehacer las clases y más de una vez.

La creación de una buena arquitectura de clases es un escollo para los principiantes. En esencia, el objetivo de la programación OOP es escribir su propio"lenguaje", un lenguaje que sea fácil y rápido de crear en el futuro. La interfaz es la esencia de un lenguaje que está diseñado para la tarea. La interfaz, de hecho, no debe ser entendida como una construcción "de tipo" de la clase, como un contrato para la clase, que debe ser ejecutado en el código (en MQL, no existe y el papel de la interfaz puede ser débilmente realizado por los métodos virtuales).

Por ejemplo, se puede crear un "lenguaje" para la creación de nuevos EAs que permita ensamblar el esquema general de los EAs a partir de objetos en unas pocas líneas. Las señales y condiciones se pueden utilizar ya hechas, o puedes desarrollar tus propias clases de señales y crear tu propia biblioteca por analogía. Esta posibilidad la ofrece el Asistente MQL5.

A menudo, el esquema de la aplicación ya ha sido desarrollado y la "programación OOP" se reduce esencialmente al uso de las clases existentes con grados de libertad limitados para escribir su propia funcionalidad - esto es conveniente. Por eso son tan populares los frameworks. Eliminan problemas y dolores de cabeza innecesarios a la hora de desarrollar la arquitectura de la aplicación. De hecho, escribir algo propio es crear una clase heredera de una de las clases del framework, y escribir la implementación de ciertos métodos del backend en ella, que ya están incorporados en la lógica general de la aplicación (OnInit, OnTick, por ejemplo).

 
Vigor:

...

La creación de una arquitectura de clases competente es un escollo para los principiantes. En esencia, el objetivo de la programación OOP es escribir su propio"lenguaje", un lenguaje que sea fácil y rápido de crear en el futuro. La interfaz es la esencia de un lenguaje que está diseñado para la tarea. La interfaz no debe entenderse como una construcción de "tipo" de la clase, como un contrato para la clase, que debe ser ejecutado en el código (en MQL, no existe, y el papel de la interfaz puede ser validado por los métodos virtuales).

...

El objetivo de la programación orientada a objetos es más bien escribir su propia arquitectura. En cuanto tenemos una arquitectura bien definida, clara e intuitiva, todo encaja y ni la complejidad del proyecto ni su volumen son factores limitantes. Sin embargo, para conseguir esta arquitectura tan clara hay que reescribir las clases una a una acercándose a este ideal inicialmente vago.
 
C-4:
Más bien, el objetivo de la programación orientada a objetos es escribir su propia arquitectura. En cuanto tenemos una arquitectura clara, concisa e intuitiva, todo encaja y ni la complejidad del proyecto ni su alcance son ya factores limitantes. Sin embargo, para conseguir esta arquitectura tan clara hay que reescribir las clases una a una acercándose a este ideal inicialmente vago.
+1
Razón de la queja: