Vitual und Redefinition

Jennesta

Erfahrenes Mitglied
Hallo,
ich löse gerade einige Aufgaben. Dabei ist mir klar geworden, dass ich nicht wirklich verstanden habe was der Unterschied zwischen einer virtuell deklarierten Methode und einer redefinierten Methode ist.
Ich habe auch in einem C++-Buch gelesen aber es ist mir dennoch irgendwie unklar weil ich das dirkete Anwendungsgebiet der jeweiligen Art nicht erkenne.
Wäre echt klasse, wenn wir jemand den Unterschied einmal erklären könnte.

Ich habe hier den Fall, dass ich eine Basisklasse und 2 Unterklassen habe, die jeweils die Methoden aus der Basisklasse mitnutzen sollen (wegen Codedublizierung), also wenn jemand ein Beispiel darauf bringen kann um das zu erklären würde das sicher helfen.

Grüße Jennesta
 
Hallo,
ich löse gerade einige Aufgaben. Dabei ist mir klar geworden, dass ich nicht wirklich verstanden habe was der Unterschied zwischen einer virtuell deklarierten Methode und einer redefinierten Methode ist.
Die Redefinition einer Methode ist in C++ nicht zulässig. Du meinst vermutlich das Überschreiben einer Methode in einer Unterklasse.

Ich habe auch in einem C++-Buch gelesen aber es ist mir dennoch irgendwie unklar weil ich das dirkete Anwendungsgebiet der jeweiligen Art nicht erkenne.
Wäre echt klasse, wenn wir jemand den Unterschied einmal erklären könnte.
C++:
#include <iostream>

class CBase {
 public:
  virtual void virtual_func(void) {
    std::cout << "CBase::virtual_func" << std::endl;
  }
  void nonvirtual_func(void) {
    std::cout << "CBase::nonvirtual_func" << std::endl;
  }
};

class CDerived : public CBase {
 public:
  virtual void virtual_func(void) {
    std::cout << "CDerived::virtual_func" << std::endl;
  }
  void nonvirtual_func(void) {
    std::cout << "CDerived::nonvirtual_func" << std::endl;
  }
};

int main(void) {  
  CDerived derived_instance;
  derived_instance.virtual_func();    // => CDerived::virtual_func
  derived_instance.nonvirtual_func(); // => CDerived::nonvirtual_func
 
  CBase *base_ptr = &derived_instance;
  base_ptr->virtual_func();           // => CDerived::virtual_func
  base_ptr->nonvirtual_func();        // => CBase::nonvirtual_func

  return 0;
}

Grüße, Matthias
 
Zuletzt bearbeitet:
Zurück