Anzeigen: Delphi C++
Anzeigeeinstellungen

Abstrakte Klassen

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

Nach oben zu Polymorphe Klassen - Index

Eine abstrakte Klasse ist eine Klasse mit mindestens einer abstrakten virtual-Funktion. Eine virtual-Funktion wird zu einer abstrakten Funktion, indem sie auf Null gesetzt wird.

Eine abstrakte Klasse kann nur als eine Basisklasse für andere Klassen verwendet werden. Es ist nicht möglich, Objekte einer abstrakten Klasse zu generieren. Eine abstrakte Klasse kann nicht als Argumenttyp oder Funktionsrückgabetyp verwendet werden. Es ist jedoch möglich, Zeiger auf eine abstrakte Klasse zu deklarieren. Wenn zur Initialisierung kein temporäres Objekt benötigt wird, sind auch Referenzen auf eine abstrakte Klasse erlaubt. Zum Beispiel:



 class shape {       // abstrakte Klasse
    point center;
 .
 .
 .
 public:
    where() { return center; }
    move(point p) { center = p; draw(); }
    virtual void rotate(int) = 0; // abstrakte virtuelle Funktion
    virtual void draw() = 0;      // abstrakte virtuelle Funktion
    virtual void hilite() = 0;    // abstrakte virtuelle Funktion
 .
 .
 .
 }
 shape x;// FEHLER: Versuch, ein Objekt einer abstrakten Klasse zu erstellen
    shape* sptr;	// Zeiger auf abstrakte Klasse ist zulässig
    shape f();// FEHLER: Abstrakte Klasse kann kein Rückgabetyp sein
 int g(shape s);// FEHLER: Abstrakte Klasse kann kein Funkionsargumenttyp sein
 shape& h(shape&);// Referenz auf abstrakte Klasse als Rückgabewert
  // oder Funktionsargument ist OK



Nehmen wir an, D sei eine abgeleitete Klasse mit der abstrakten Klasse B als unmittelbarer Basisklasse, die eine abstrakte Funktion pvf enthält. Stellt D keine Definition für pvf bereit, wird pvf eine abstrakte Elementfunktion von D, und D wird dadurch zu einer abstrakten Klasse.

Mit der oben eingeführten Klasse shape sieht das folgendermaßen aus:



 class circle : public shape {// circle abgeleitet von abstrakter Klasse
    int radius;// private
 public:
    void rotate(int) { }// virtuelle Funktion definiert: zur Rotation des
             // Kreises wird keine Aktion benötigt.
    void draw();      // circle::draw muss an anderer Stelle definiert werden
 }



Elementfunktionen können von einem Konstruktor einer abstrakten Klasse aufgerufen werden. Der direkte oder indirekte Aufruf einer abstrakten Funktion führt jedoch zu einem Laufzeitfehler.

Siehe auch

Frühere Versionen
In anderen Sprachen