- Funktionsaufruf
- Parameteruebertragung
- Überladen von Funktionen
- Überladen von Operatoren
- Beschreibung der Aussenfunktionen
- Exportieren der Funktionen
- Ereignisbearbeiter
Überladung der Funktionen
Gewoehnlich versucht man im Namen der Funktion ihre Hauptbedeutung darzustellen. In der Regel haben lesbare Programme verschiedenartige und gut passende Identifikatoren. Manchmal werden verschiedene Funktionen für dieselbe Zwecke verwendet. Betrachten wir zB die Funktion, die den Durchschnittwert des Feldes von Zahlen mit Doppelgenauigkeit berechnet und dieselbe Funktion, die aber mit Feldern der Ganzzahlen operiert. Sowie Die erste, als auch die zweite benenne wir AverageFromArray:
//+------------------------------------------------------------------+
|
Jede Funktion hat Nachrichtenausgabe mittels der Funktion Print();
Print("Berechnung des Durchschnittwertes für Feld der Art int"); |
Compilierer waehlt die notwendige Funktion der Argumententypen und dern Zahl entsprechend. Regel, nach der diese Wahl durchgeführt wird, heisst Algorithmus der Signaturübereinstimmung. Unter Signatur wird die Typenliste verstanden, die in der Funktionserklärung verwendet wird.
Beispiel:
//+------------------------------------------------------------------+
|
überladung ist Zuordnung drr mehreren Werte einer Funktion. Die Auswahl des konkreten Wertes hängt von Argumententypen ab, die die Funktion erhalten hat. Bestimmte Funktion wird abhängig davon ausgewaehlt, ob die Liste der Argumente beim Funktionsaufruf der Liste der Parameter in Funktionserkaerung entspricht oder nicht.
Wenn überladene Funktion aufgerufen wird, muss der Compiler Algorithmus für Auswahl notwendiger Funktion haben. Algorithmus, der diese Wahl trifft, hängt von dem Umwandlungstyp ab. Die beste übereinstimmung muss einzigartig sein. Sie muss am besten für wenigstens ein Argument sein und so gut, wie andere übereinstimmungen für alle anderen Argumente sein.
Unten ist Algorithmus der übereinstimmung für jedes Argument angegeben.
Algorithmus der Wahl von überladener Funktion
- strikte übereinstimmung vewenden (wenn es moeglich ist).
- Standarderhoehung des Typs probieren.
- Standardumwandlung des Typs probieren.
Standarderhoehung des Typs ist besser, als andere Standartumwandlungen. Erhoehung ist Umwandlung von float in double, aber auch von bool, char, short oder enum in int. Außerdem gehört zu Standardumwandlunen Umwandlungen der Felder von aehnlichen Ganzzahliger Typen. Ganzzahlige Typen sind: bool, char, uchar, denn alle drei Typen sind ganzzahlige 1-Byte Typen; 2-Byte ganzzahlige Typen short und ushort; 4-Byte ganzzahlige Typen int, unint und color; long, ulong und datetime.
Bestimmt ist strikte übereinstimmung am besten. Für diese übereinstimmung können Typenreduzierungen verwendet werden. Compilierer wird nicht die doppeldeutige Situation schaffen. Darum soll man nicht auf feine Unterschiede unter Typen und explizite Umwandlungen Wert legen, die gestaute Funktion unklar machen.
Wenn Sie zweifeln, verwenden Sie explizite Umwandlungen, um strikte übereinstimmung zu gewaehrleisten.
Beispiele überladener Funktionen in MQL5 können Sie am Beispiel der Funktionen ArrayInitialize() beobachten.
überladungsregeln der Funktion ist für überladung der Klassenmethoden anwendbar.
überladen der Sysemfunktionen ist zulaessig, dabei muss man verfolgen, dass Compiler die noetige Funktion genau waehlen kann. ZB können wir Systemfunktion fmax() mittels der drei vershiedenen Verfahren stauen, aber nur zwei von ihnen werden korrekt sein.
Beispiel:
// Stauung ist zulaessig - unterscheidet sich nach der Zahl der Parameter
|
Sehen Sie auch