FSST - Hardwarenahe Programmierung
Ausserhalb der Klassendeklaration
- Es werden wieder die notwendigen Header-Dateien mit den Praeprozessor-Direktiven inkludiert. (Zeile 1 und 2)
- Erzeugung neuer Klassen: in Zeile 4 erfolgt die Deklaration der Klasse de_Bertl abgeleitet von der Klasse ur_Bertl mittels ":" und public.
- In Zeile 7 erfolgt die Deklaration der Befehle/Methoden (Prototyping).
- Erzeugung neuer Befehle: In Zeile 10 erfolgt die Definition der Methoden mittels Scope-Operator (::) für die entsprechende Klasse (hier: de_Bertl :: Bewege()) und er zugehörende Code. (Zeile 11 -13)
- Instantiierung der Klasse: In Zeile 17 wird in main() ein Objekt karel der Klasse de_Bertl erzeugt (instatiiert).
- Aufruf der Befehle mittels Objektname (karel) einem Punkt (".") und dem Methodennamen (Bewege) den runden Klammern () und einem ";" zum Trennen weiterer Befehle. Zeile 19-21
#include "mbed.h" #include "ur_Bertl.h" class de_Bertl : public ur_Bertl { public: void Bewege(); // nur Deklaration - Prototyping }; void de_Bertl :: Bewege() // Definieren { Move(); } int main() { de_Bertl karel; karel.Bewege(); karel.Move(); karel.ShutOff(); }
Anmerkung inline vs. not-inline Methode
Der einzige Unterschied zwischen der vollständigen Definition einer Methode innerhalb der Klassendefinition oder ihrer Deklaration (Funktionsprototyping) und ihrer späteren Definition außerhalb der Klasse besteht darin, dass die Methode im ersten Fall automatisch als Inline Mitgliedsfunktion durch den Compiler betrachtet wird, während es in der zweiten eine normale (nicht-inline) Klassenmitgliedsfunktion ist. Dies verursacht keine Unterschiede im Verhalten, sondern nur bei möglichen Compiler-Optimierungen.
Mittels des inline-Modifikators könnte der Compiler angewiesen werden, dass die Methode inline ist (also an die Stelle der Aufrufe kopiert wird).
inline void de_Bertl :: Bewege() // Inline-Methode { Move(); }