Reine virtuelle Funktionen: Implementierung und Zweck
In C sind rein virtuelle Funktionen normalerweise mit der Deklaration der Schnittstelle einer Methode verbunden, ohne deren Implementierung bereitzustellen. Es ist jedoch möglich, eine rein virtuelle Funktion mit einer Implementierung zu haben, wie unten dargestellt:
class A { public: virtual void f() = 0; }; void A::f() { cout << "Test" << endl; }
Dieser Code ist zwar syntaktisch gültig, sein Zweck und seine Verwendung erfordern jedoch weitere Erläuterungen.
Zweck der Bereitstellung einer Implementierung für eine rein virtuelle Funktion:
Eine Basisklasse kann jedoch eine Implementierung für eine rein virtuelle Funktion definieren Abgeleitete Klassen müssen ihre eigenen Implementierungen bereitstellen. Der Zweck dieser Implementierung kann sein:
So rufen Sie die Basisklassenimplementierung auf:
Abgeleitete Klassen können die Basisklassenimplementierung einer rein virtuellen Funktion mithilfe einer vollumfänglichen Funktion aufrufen Name:
class B : public A { virtual void f() { // class B doesn't have anything special to do for f() // so we'll call A's // note that A's declaration of f() would have to be public // or protected to avoid a compile time problem A::f(); } };
Anwendungsfall:
Stellen Sie sich ein Szenario vor, in dem es ein vernünftiges Standardverhalten für eine Methode gibt. Der Klassendesigner möchte jedoch, dass dieses Standardverhalten nur explizit aufgerufen wird. Durch die Bereitstellung einer Implementierung für eine rein virtuelle Funktion in der Basisklasse können abgeleitete Klassen bei Bedarf auf dieses Standardverhalten zugreifen und es verwenden.
Hinweis:
Obwohl dies technisch möglich ist Eine Implementierung für rein virtuelle Funktionen bereitzustellen, ist eine ungewöhnliche Praxis und kann zu Verwirrung führen. Daher wird generell empfohlen, dies zu vermeiden, es sei denn, es gibt einen klaren und berechtigten Grund.
Das obige ist der detaillierte Inhalt vonKönnen reine virtuelle Funktionen in C implementiert werden, und warum sollten Sie das tun?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!