Normale Methoden (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Virtuelle Methoden


Klassenmethoden gelten als normal (nicht-virtuell), sofern sie nicht explizit als virtuell deklariert sind und solange sie keine virtuelle Methode in einer Basisklasse überschreiben. Der Compiler kann die exakte Adresse eines normalen Klassenelements während der Compilierung bestimmen. Dies wird als Bindung während der Compilierung bezeichnet.

Eine normale Methode einer Basisklasse wird von abgeleiteten Klassen geerbt. Im folgenden Beispiel kann ein Objekt des Typs Derived die Methode Regular() so aufrufen, als handelte es sich um seine eigene. Die Deklaration einer Methode in einer abgeleiteten Klasse mit demselben Namen und denselben Parametern wie bei einer normalen Methode im Vorfahren der Klasse bewirkt, dass die Methode des Vorfahren ersetzt wird. Im folgenden Beispiel bewirkt der Aufruf von d->AnotherRegular() die Verteilung an die in der Klasse Derived vorhandene Ersetzung für AnotherRegular().


 class Base
 {
 public:
     void Regular();
     void AnotherRegular();
     virtual void Virtual();
 };
 class Derived : public Base
 {
 public:
     void AnotherRegular();         // Ersetzt Base::AnotherRegular()
     void Virtual();                // Überschreibt Base::Virtual()
 };
 void FunctionOne()
 {
   Derived *d;
   d = new Derived;
   d->Regular();                  // Regular() wird wie ein Element von Derived aufgerufen,
                                   // Entspricht dem Aufruf von d->Base::Regular()
   d->AnotherRegular();           // Aufruf der neu definierten AnotherRegular(), ...
                                   // ... dem Ersatz für Base::AnotherRegular()
   delete d;
 }
 void FunctionTwo(Base *b)
 {
   b->Virtual();
   b->AnotherRegular();
 }