Heim > Backend-Entwicklung > C++ > Können reine virtuelle Funktionen in C implementiert werden, und warum sollten Sie das tun?

Können reine virtuelle Funktionen in C implementiert werden, und warum sollten Sie das tun?

Mary-Kate Olsen
Freigeben: 2024-12-18 04:11:09
Original
713 Leute haben es durchsucht

Can Pure Virtual Functions in C   Have Implementations, and Why Would You Do That?

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;
}
Nach dem Login kopieren

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:

  • Standardverhalten: Stellen Sie ein Standardverhalten bereit, das abgeleitete Klassen erben können. Abgeleitete Klassen müssen jedoch explizit A::f() aufrufen, um dieses Standardverhalten zu nutzen.
  • Gemeinsame Funktionalität: Definieren Sie einen gemeinsamen Satz von Funktionen, der von allen abgeleiteten Klassen wiederverwendet werden kann. Durch die Bereitstellung einer Implementierung in der Basisklasse können abgeleitete Klassen optional diese gemeinsame Funktionalität zusammen mit ihren eigenen Anpassungen aufrufen.

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();
    }

};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage