Uebung Klassen - VIRTUELLE METHODEN

Dependencies:   mbed

Committer:
Powers
Date:
Thu Jan 31 21:27:46 2019 +0000
Revision:
0:818a912f339d
Uebung zu Klassen; Virtuelle Methoden erklaert

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Powers 0:818a912f339d 1 #include "mbed.h"
Powers 0:818a912f339d 2
Powers 0:818a912f339d 3 // Uebung zu VIRTUELLE METHODEN
Powers 0:818a912f339d 4 // SIEHE KOMMENTARE IM CODE
Powers 0:818a912f339d 5 // Ausgabe SERIAL
Powers 0:818a912f339d 6
Powers 0:818a912f339d 7
Powers 0:818a912f339d 8 // Virtuelle Methoden werden benötigt wenn Methoden der Basis Klasse von
Powers 0:818a912f339d 9 // Methoden der abgeleiteten Klassen überschrieben werden. Und man später
Powers 0:818a912f339d 10 // doch darauf zugreifen möchte Die Adressierung
Powers 0:818a912f339d 11 // von einer virtuellen Methode wird erst zur Laufzeit über die V-Tabelle erledigt
Powers 0:818a912f339d 12 // so kann man sie später umadressieren.
Powers 0:818a912f339d 13
Powers 0:818a912f339d 14 class BASE
Powers 0:818a912f339d 15 {
Powers 0:818a912f339d 16 public:
Powers 0:818a912f339d 17 BASE(int x) {}
Powers 0:818a912f339d 18 virtual void test(void) // Virtuelle Methoden werden mit dem Prefix virtual gekennzeichnet
Powers 0:818a912f339d 19 {
Powers 0:818a912f339d 20 printf("Klasse BASE \n");
Powers 0:818a912f339d 21 }
Powers 0:818a912f339d 22 };
Powers 0:818a912f339d 23
Powers 0:818a912f339d 24 class LIGHT : public BASE
Powers 0:818a912f339d 25 {
Powers 0:818a912f339d 26 public:
Powers 0:818a912f339d 27 LIGHT(int x):BASE(x) {}
Powers 0:818a912f339d 28 virtual void test(void)
Powers 0:818a912f339d 29 {
Powers 0:818a912f339d 30 printf("Klasse LIGHT \n");
Powers 0:818a912f339d 31 }
Powers 0:818a912f339d 32 };
Powers 0:818a912f339d 33
Powers 0:818a912f339d 34 // Man erstellt einen Pointer der auf die Basisklasse zeigt und ändert dann
Powers 0:818a912f339d 35 // während der Laufzeit seine Adresse, einmal Basisklasse und einem Vererbte Klasse
Powers 0:818a912f339d 36 // So kann dann die Methode ueber den Pointer aufgerufen werden, dessen Klassenadresse
Powers 0:818a912f339d 37 // im Pointer gespeichert ist
Powers 0:818a912f339d 38
Powers 0:818a912f339d 39 BASE *pointer;
Powers 0:818a912f339d 40 BASE base(3);
Powers 0:818a912f339d 41 LIGHT light(7);
Powers 0:818a912f339d 42
Powers 0:818a912f339d 43 int main()
Powers 0:818a912f339d 44 {
Powers 0:818a912f339d 45 pointer = &base; // Adresse vom Objekt der Basisklasse
Powers 0:818a912f339d 46 pointer->test(); // Aufruf der Methode test() aus der Basisklasse
Powers 0:818a912f339d 47 pointer = &light; // Adresse vom Objekt der Vererbten Klasse
Powers 0:818a912f339d 48 pointer->test(); // Aufruf der Methode test() aus der Vererbten Klasse
Powers 0:818a912f339d 49
Powers 0:818a912f339d 50 return 0;
Powers 0:818a912f339d 51 }