Von überall kommt ihr über dieses Logo auf diese Seite zurück!

Virtuelle Methoden (dynamische Polymorphie)


C++ bietet die Möglichkeit, Methoden zu erstellen, die nicht direkt angesprochen werden, sondern rein virtuell in einer Klasse vorhanden sind. Zusätzlich zu dieser virtuellen Deklaration in einer Klasse, sollte es Erben geben, welche eine Methode mit dem gleichen Namen haben. Nun kann diese Methode auch dann aufgerufen, wenn von einem Zeiger auf die Basisklasse aus aufgerufen wird. So ist es möglich, viele verschiedene Erben einer Klasse mit einer Liste auf die Basisklasse einheitlich zu verwalten.
Ein Beispiel wäre eine Basisklasse Grafikobjekt mit den Erben Kreis und Rechteck. Kreis und Rechteck brauchen die Funktion Zeichnen, Grafikobjekt ist hingegen noch soweit undefiniert, dass etwas zu Zeichnen keinen Sinn macht. Um nun zwei Objekte mit einem Rechteck und einem Kreis mit einem Zeiger ansprechen zu können, muss also die Methode Zeichnen in Grafikobjekt virtuell deklariert werden.

class CGrafik
{
  protected:
    int m_x, m_y;   // Koordinaten
  public:
    virtual void Zeichnen() {};
};

class CRechteck:public CGrafik
{
  int l,b;  // Laenge und Breite
public:
  virtual void Zeichnen() { // Zeichne Rechteck }
};

class CKreis:public CGrafik
{
  int radius;
public:
  virtual void Zeichnen() { // Zeichne Kreis }
};

// In der Hauptdatei in einer Main-Funktion

int main(void)
{
  CGrafik * a[10]; // a ist ein Array von 10 Zeigern 
                   // auf Grafikobjekte
  a[0]=new CRechteck;
  a[1]=new CKreis;
  // usw.

  for (int i=0; i<10; ++i)
  { 
    // Egal welcher Erbe hier hinter dem Zeiger steht,
    // es können nun alle gezeichnet werden.
    a[i] -> Zeichnen();
  }
}



Zurück auf die Vorlesung: Visual C++-Seite <> Homepage