Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿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 &.
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
No he podido encontrar en la documentación un retorno de referencia en los parámetros de la función.
¿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:
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.
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.
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.
¿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).
...
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).
...
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.