- Ganzzahlige Typen
- Realtypen (double, float)
- Komplexen Zahlen (complex)
- Typ string
- Strukturen, Klassen und Schnittstellen
- Objekt des dynamischen Arrays
- Matrizen und Vektoren
- Typenreduzierung
- Typ void und Konstante NULL
- Benutzerdefinierte Typen
- Objektanzeiger
- Referenzen. Modifikator& und Schluesselwort this
Benutzerdefinierte Typen
Das typedef Schlüsselwort in C++ ermöglicht die Erstellung benutzerdefinierter Typen. Dafür reicht es, einem bereits existierenden Datentyp einen neuen Namen zu geben. Dabei wird kein neuer Datentyp erstellt, es wird nur ein neuer Name einem bereits existierenden Typ gegeben. Dank der Anwendung benutzerdefinierter Typen kann man Programme flexibler machen: dafür reicht es manchmal, typedef-Anweisungen mithilfe von Makros (#define) zu modifizieren. Darüber hinaus erlaubt die Anwendung benutzerdefinierter Typen, die Lesbarkeit des Codes zu verbessern, weil man mithilfe von typedef eigene beschreibende Namen für Standarddatentypen verwenden kann. Das allgemeine Format einer Anweisung für die Erstellung eines benutzerdefinierten Typs:
typedef Typ neuer_Name; |
Das Element Typ bezeichnet hier jeden zulässigen Datentyp, und das Element neuer_Name – den neuen Namen für diesen Typ. Es ist wichtig zu betonen, dass der neue Name nur ein Zusatz zum bereits existierenden Namen eines Typs und kein Ersatz ist. In der MQL5 Programmiersprache können mithilfe von typedef Funktionspointer erstellt werden.
Funktionspointer
Ein Funktionspointer hat das folgende Format
typedef Typ_des_Ergebnisses_der_Funktion (*Name_des_Funktionstyps)(Liste_der_Typen_der_Eingabeparameter); |
wo nach dem Wort typedef die Signatur der Funktion gesetzt wird: die Anzahl und der Typ der Eingabeparameter sowie der Typ des Ergebnisses der Funktion. Führen wir ein einfaches Beispiel für die Erstellung und Verwendung eines Funktionspointers:
//--- deklarieren wir einen Pointer auf die Funktion, die zwei Parameter vom Typ int akzeptiert
|
In diesem Beispiel kann man der func_ptr Variablen die Funktionen sub und add zuweisen, denn sie habe je zwei Inputparameter vom Typ int, wie dies in der Definition des TFunc Funktionspointers angegeben ist. Die Funktion neg kann nicht dem Bezeichner func_ptr zugewiesen werden, denn ihre Signatur ist anders.
Gestaltung von Event-Modellen in der Benutzerschnittstelle
Mithilfe von Funktionspointern ist es einfach, die Verarbeitung von Ereignissen bei der Erstellung einer Benutzerschnittstell zu gestalten. Anhand eines Beispiels aus dem CButton Bereich veranschaulichen wir, wie man Buttons erstellen und ihnen Funktionen für die Verarbeitung von Klicks hinzufügen kann. Zuerst definieren wir den Pointer auf die Funktion TAction, die beim Klicken auf den Button aufgerufen wird, und erstellen wir drei Funktionen entsprechend der Beschreibung von TAction.
//--- erstellen wir einen benutzerdefinierten Funktionstyp
|
Danach leiten wir die MyButton Klasse von der CButton Klasse ab, welcher wir TAction, den Funktionspointer, hinzufügen.
//+------------------------------------------------------------------+
|
Erstellen wir die von der CAppDialog Klasse abgeleitete CControlsDialog Klasse, welcher wir das m_buttons Array für das Speichern von Buttons vom Typ MyButton sowie die Methoden AddButton(MyButton &button) und CreateButtons() hinzufügen.
//+------------------------------------------------------------------+
|
Nun können wir ein Programm unter Verwendung des CControlsDialog Panels schreiben, in welchem 3 Buttons "Open", "Save" und "Close" erstellt werden. Beim Klicken auf einen Button wird die entsprechende Funktion aufgerufen, welche als TAction Funktionspointer vorgegeben ist.
//--- deklarieren wir dieses Objekt an der globalen Ebene, um es automatisch beim Starten des Programms zu erstellen
|
Das Design der gestarteten Applikation und die Ergebnisse der Klicks auf die Buttons sind auf dem Bild unten zu sehen.
Vollständiger Quellcode des Programms
//+------------------------------------------------------------------+
|
Siehe auch