Heim > Backend-Entwicklung > C++ > Virtuelle vs. rein virtuelle Funktionen: Was ist der Unterschied?

Virtuelle vs. rein virtuelle Funktionen: Was ist der Unterschied?

Mary-Kate Olsen
Freigeben: 2024-12-29 21:36:16
Original
350 Leute haben es durchsucht

Virtual vs. Pure Virtual Functions: What's the Difference?

Virtuelle Funktionen erklärt: Was sie sind und wie sie sich von rein virtuellen Funktionen unterscheiden

In der objektorientierten Programmierung das Konzept der virtuellen Funktionen ist ein wesentlicher Bestandteil des Laufzeitpolymorphismus. Eine virtuelle Funktion ist eine Funktion, die in abgeleiteten Klassen überschrieben werden kann, um unterschiedliche Implementierungen auf verschiedenen Ebenen der Klassenhierarchie bereitzustellen.

Der Hauptunterschied zwischen einer virtuellen Funktion und einer nicht virtuellen Funktion besteht darin, dass es sich um die am häufigsten abgeleitete Version handelt wird auf allen Ebenen der Klassenhierarchie verwendet, wenn eine virtuelle Funktion überschrieben wird. Im Gegensatz dazu bleibt die Funktionalität einer nicht virtuellen Funktion in der Basisklasse unverändert, auch wenn sie in einer abgeleiteten Klasse überschrieben wird.

Hier ist ein Beispiel, um das Verhalten virtueller Funktionen zu veranschaulichen:

struct Base {
    virtual ~Base() = default;

    virtual void foo() {
        std::cout << "Base::Foo" << std::endl;
    }
};

struct Derived final: Base {
    void foo() override {
        std::cout << "Derived::Foo" << std::endl;
    }
};
Nach dem Login kopieren

Das Ausführen dieses Codes erzeugt die folgende Ausgabe:

Base::Foo
Derived::Foo
Derived::Foo
Nach dem Login kopieren

Wie Sie sehen können, wenn die Funktion foo() für eine Instanz von aufgerufen wird In der Derived-Klasse wird die Derived::foo()-Implementierung verwendet, auch wenn über einen Basisklassenzeiger (Base* derivative_as_base) auf die Instanz zugegriffen wird.

Reine virtuelle Funktionen: Ein Sonderfall

Eine rein virtuelle Funktion ist eine virtuelle Funktion, die in abgeleiteten Klassen implementiert werden muss. Es ist nicht in der Basisklasse definiert und muss in einer abgeleiteten Klasse überschrieben werden, um die Klasse konkret zu machen. Eine Klasse mit einer oder mehreren rein virtuellen Funktionen gilt als abstrakt und kann nicht direkt instanziiert werden.

Hier ist ein Beispiel für eine rein virtuelle Funktion:

struct Base {
    virtual ~Base() = default;

    virtual void foo() = 0;
};

struct Derived final: Base {
    void foo() override {
        std::cout << "Derived::Foo" << std::endl;
    }
};
Nach dem Login kopieren

In diesem Fall ist die Klasse Base abstrakt, da es eine rein virtuelle Funktion foo() enthält. Um diese Klasse verwenden zu können, muss eine abgeleitete Klasse die Funktion foo() implementieren, wodurch die abgeleitete Klasse zu einer konkreten Klasse wird, die instanziiert werden kann.

Zusammenfassend können Sie mit virtuellen Funktionen die Funktionalität der Basisklasse auf verschiedenen Ebenen überschreiben die Hierarchie, während reine virtuelle Funktionen abgeleitete Klassen erfordern, um bestimmte Funktionen zu implementieren, um die Klasse konkret zu machen. Das Verständnis dieser Konzepte ist entscheidend für das Schreiben von erweiterbarem und polymorphem Code in der objektorientierten Programmierung.

Das obige ist der detaillierte Inhalt vonVirtuelle vs. rein virtuelle Funktionen: Was ist der Unterschied?. 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