Empfohlene Studie: „c++-Tutorial“
- Das Verhalten der Methode sollte vom Aufruf abhängen das Methodenobjekt. Dieses komplexere Verhalten wird Polymorphismus genannt – es hat mehrere Formen, d. h. dieselbe Methode verhält sich je nach Kontext unterschiedlich.
Virtual implementiert das Objekt, um die richtige Methode oder Methodensequenz aufzurufen.
Zwei Mechanismen zum Erreichen von Polymorphismus:
Wenn Sie beim Deklarieren einer Funktion das Schlüsselwort virtual verwenden, werden diese Methoden als virtuelle Methoden bezeichnet.
<span style="color: #0000ff;">class</span><span style="color: #000000;"> Brass {<br/>private: ...<br/>public:<br/> ...<br/> virtual void ViewAcct() const;<br/> virtual ~Brass(){} }</span>
BrassPlus :
Die Basisklasse deklariert eine virtuelle Funktion, um sicherzustellen, dass beim Freigeben des abgeleiteten Objekts der Destruktor in der richtigen Reihenfolge aufgerufen wird (siehe die Rolle virtueller Funktionen später). .
Brass dom("Dominic Banker", 11224, 4183.45); BrassPlus dot("Dorothy Banker", 12118, 2592.00); dom.ViewAcct(); // use Brass::ViewAcct()dot.ViewAcct(); // use BrassPlus::ViewAcct()
Die beiden ViewAcct()-Prototypen zeigen an, dass es zwei unabhängige Methodendefinitionen geben wird. Die Basisklassenversion hat den qualifizierten Namen Brass::ViewAcct() und die abgeleitete Klassenversion hat den qualifizierten Namen BrassPlus::ViewAcct().
Rufen Sie eine Methode per Referenz oder Zeiger anstelle eines Objekts auf:
Wenn das Schlüsselwort virtual nicht verwendet wird, wählt das Programm basierend auf dem aus Referenztyp oder Zeigertyp Methode:
// behavior with non-virtual ViewAcct()// method chosen according to reference typeBrass &b1_ref = dom; Bross &b2_ref = dot; b1_ref.ViewAcct(); // use Brass::ViewAcct()b2_ref.ViewAcct(); // use Brass::ViewAcct()
Wenn Sie eine Basisklassenmethode in einer abgeleiteten Klasse neu definieren möchten, sollten Sie die Basisklassenmethode normalerweise als virtuell deklarieren. Auf diese Weise wählt das Programm die Methodenversion basierend auf dem Objekttyp und nicht auf der Art der Referenz oder des Zeigers aus. Es ist auch üblich, einen virtuellen Destruktor für eine Basisklasse zu deklarieren. Durch die Verwendung eines virtuellen Destruktors wird sichergestellt, dass die richtige Reihenfolge der Destruktoren aufgerufen wird (d. h. vom abgeleiteten Klassenobjekt zum Basisklassenobjekt, das ihre Destruktoren einmal aufruft).
Aufrufen von Basisklassenmethoden: Bei abgeleiteten Klassenmethoden besteht die Standardtechnik darin, den Bereichsauflösungsoperator zum Aufrufen von Basisklassenmethoden zu verwenden:
<span class="cnblogs_code">Brass::ViewAcct(); <span style="color: #008000;">//<code><span class="cnblogs_code">Brass::ViewAcct(); <span style="color: #008000;">//</span><span style="color: #008000;"> display base portion</span></span>
Basisteil anzeigen
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der polymorphen öffentlichen Vererbung in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!