- Tipi Integer
- Tipi Reali (double, float)
- Numero complesso (complex)
- Tipo Stringa
- Strutture, Classi e Interfacce
- Oggetto Array Dinamico
- Matrices and vectors
- Typecasting
- Tipo Void e Costante NULL
- Tipi definiti dall'utente
- Puntatori agli Oggetti
- Riferimento. Il Modifier & e la parola chiave this
I tipi definiti dall'utente
La parola chiave typedef in C++ permette di creare tipi di dati definiti dall'utente. Per farlo, è sufficiente specificare un nuovo nome di tipo di dati per un tipo di dati già esistenti. Il nuovo tipo di dati non viene creato. Un nuovo nome per il tipo esistente viene definito, invece. I tipi definiti dall'utente rendono le applicazioni più flessibili: a volte, è sufficiente cambiare istruzioni typedef utilizzando macro sostitutive (#define). I tipi definiti dall'utente anche migliorano la leggibilità del codice dal momento che è possibile applicare nomi personalizzati ai tipi di dati standard utilizzando typedef. Il formato generale della voce per la creazione di un tipo definito dall'utente:
typedef type new_name; |
Qui, type significa qualsiasi tipo di dati accettabile, mentre new_name è un nuovo nome del tipo. Un nuovo nome viene impostato soltanto in aggiunta (non in sostituzione) a un nome di tipo esistente. MQL5 permette di creare puntatori a funzioni utilizzando typedef.
Puntatore alla funzione
Un puntatore a una funzione è generalmente definito nel seguente formato
typedef tipo_risultato_funzione*Nome_tipo_funzione)(lista_di_tipi_di_parametri_di_input); |
dove dopo typedef, viene impostata la firma di funzione (numero e tipo dei parametri di input, così come un tipo di risultato restituito dalla funzione). Ecco un semplice esempio di creazione ed applicazione di un puntatore ad una funzione:
//--- dichiarare un puntatore a una funzione che accetta due parametri int
|
In questo esempio, la variabile func_ptr può ricevere le funzioni sub e add poiché hanno due input ciascuno di tipo int definito nel puntatore alla funzione TFunc. Al contrario, la funzione neg non può essere assegnata al puntatore func_ptr giacchè dalla sua firma è diversa.
Organizzazione di modelli di eventi nell'interfaccia utente
Puntatori a funzioni permettono di creare facilmente l'elaborazione di eventi durante la creazione di un'interfaccia utente. Facciamo un esempio, dalla sezione CButton per mostrare come creare bottoni ed aggiungere le funzioni per il loro handling. In primo luogo, definire un puntatore alla funzione TAction da chiamare premendo il bottone e creare tre funzioni secondo la descrizione TAction.
//--- crea un tipo di funzione personalizzata
|
Quindi, crea la classe MyButton da CButton, dove dovremmo aggiungere il puntatore alla funzione TAction.
//+------------------------------------------------------------------+
|
Crea la classe derivata CControlsDialog daCAppDialog, aggiunge l'array m_buttons ad essal per memorizzare i pulsanti tel tipo MyButton, nonché i metodi AddButton(MyButton &button) e CreateButtons() .
//+------------------------------------------------------------------+
|
Ora, siamo in grado di sviluppare il programma utilizzando il pannello di controllo CControlsDialog avente 3 pulsanti: Apri, Salva e Chiudi. Quando si fa clic su un bottone, la funzione appropriata nella forma di puntatore TAction viene chiamata.
//--- dichiara l'oggetto a livello globale per creare automaticamente quando si lancia il programma
|
L'apparenza dell'applicazione lanciata e il click dei bottoni viene fornita sulla schermata.
Il codice sorgente completo del programma
//+------------------------------------------------------------------+
|
Guarda anche