- Tipos enteros
- Tipos reales (double, float)
- Números complejos (complex)
- Tipo string
- Estructuras, clases e interfaces
- Objeto de un array dinámico
- Matrices y vectores
- Conversión de tipos
- Tipo void y constante NULL
- Tipos personalizados
- Punteros a objetos
- Referencias Modificador & y palabra clave this
Tipos personalizados
La palabra clave typedef en el lenguaje C++ permite crear tipos de datos personalizados, para ello, basta con definir el nuevo nombre del tipo de datos para un tipo de datos ya existente. Además, en este caso, el propio tipo de datos no se crea: solo se define el nuevo nombre para un tipo de datos ya existente. Gracias al uso de tipos personalizados es posible hacer los programas más flexibles: para ello, a veces basta con cambiar las instrucciones typedef con la ayuda de macro-sustituciones (#define). El uso de tipos personalizados permite mejorar la legibilidad del código, ya que para los tipos de datos estándar, con la ayuda de typedef se pueden usar nombres descriptivos propios. El formato general de registro de instrucciones para crear un tipo personalizado es el siguiente:
typedef tipo nuevo_nombre; |
Aquí el elemento tipo designa cualquier tipo de datos permisible, y el elemento nuevo_nombre, el nuevo nombre para este tipo. Es importante destacar que el nuevo nombre se define solo como adición a un nombre de tipo ya existente, pero no lo sustituye. En el lenguaje MQL5, con la ayuda de typedef, se pueden crear punteros a una función.
Puntero a una función
En general, el puntero a una función se define con el formato de registro
typedef tipo_de_resultado_de_la_función (*Nombre_del_tipo_de_función)(lista_de_tipos_de_los_parámetros_de_entrada); |
donde, después de la palabra typedef se establece la signatura de la función, es decir, el número y el tipo de parámetros de entrada, así como el tipo de resultado retornado por la función. Como explicación, mostraremos un sencillo ejemplo de creación y uso de un puntero a una función:
//--- declaramos el puntero a una función, que usa dos parámetros del tipo int
|
En este ejemplo, a la variable func_ptr se le pueden asignar las funciones sub y add, puesto que cada una de ellas tiene dos parámetros int, como se indica en la definición del puntero a la función TFunc. A su vez, la función neg no puede ser asignada al puntero func_ptr, puesto que su signatura se diferencia.
Organización de los modelos de evento en la interfaz de usuario
Con la ayuda de los punteros a funciones es sencillo construir el procesamiento de eventos a la hora de crear una interfaz de usuario. Usando como ejemplo el apartado CButton, mostraremos cómo crear botones y añadirles funciones para procesar la pulsación. Primero tenemos que definir el puntero a la función TAction, que se llamará al pulsar un botón, y después crear tres funciones de acuerdo con la descripción de TAction.
//--- creamos el tipo de función personalizado
|
Después reproduciomos la clase MyButton de CButton, en la que añadimos el miembro TAction, que es el puntero a la función.
//+------------------------------------------------------------------+
|
A continuación, creamos la clase derivada CControlsDialog de CAppDialog, en la que añadimos la matriz m_buttons para guardar los botones del tipo MyButton, así como los métodos AddButton(MyButton &button) y CreateButtons().
//+------------------------------------------------------------------+
|
Ahora podemos escribir un programa con el uso del panel de control CControlsDialog, en el que se crean 3 botones "Open", "Save" y "Close". Al pulsar un botón, se llama la función que le corresponde, escrita en forma de puntero a la función TAction.
//--- declaramos el objeto a nivel global, para crearlo de forma automática al iniciar el programa
|
En la imagen se muestra el aspecto externo de la aplicación iniciada, así como los resultados de la pulsación de los botones.
Código fuente completo del programa
//+------------------------------------------------------------------+
|
Vea también