Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Reine Virtuelle Methode | Überblick Über Polymorphismus
C++ OOP
course content

Kursinhalt

C++ OOP

C++ OOP

1. Grundlagen der OOP in C++
2. Konstruktoren und Destruktoren
3. Überblick Über Die Kapselung
4. Überblick Über Vererbung
5. Überblick Über Polymorphismus

book
Reine Virtuelle Methode

Das Konzept der virtuellen Methoden ist entscheidend für die Umsetzung von Polymorphie und ermöglicht ein flexibles sowie erweiterbares Softwaredesign. Rein virtuelle Methoden erweitern dies, indem sie Schnittstellen definieren und die dynamische Bindung unterstützen.

Syntax einer rein virtuellen Methode

Eine rein virtuelle Methode wird mit dem Schlüsselwort virtual deklariert und mit null initialisiert. Dies zeigt an, dass die Funktion innerhalb der class keine Definition besitzt und von jeder Unterklasse überschrieben werden muss, bevor Objekte dieser class instanziiert werden können.

virtual.h

virtual.h

copy
1
virtual void example() = 0;

Diese Methode funktioniert ähnlich wie eine gewöhnliche Methode, außer dass sie keinen Rumpf in { } besitzt und stattdessen mit = 0; abgeschlossen wird, was auf eine fehlende Implementierung hinweist. Die übrigen Regeln für diese Methode entsprechen jedoch denen regulärer Methoden.

Die Deklaration einer rein virtuellen Methode macht die class, in der sie deklariert ist, abstrakt, was bedeutet, dass es unmöglich ist, Objekte dieser Klasse zu instanziieren. Diese Einschränkung besteht, weil jede Methode innerhalb der class implementiert werden muss, bevor eine Instanz erstellt und verwendet werden kann, um Fehler und unvorhersehbares Verhalten zu vermeiden. Siehe dir den folgenden Code an:

Animal.h

Animal.h

copy
1234
class Animal { public: virtual void speak() = 0; };

Die Animal-class verfügt über eine reine virtuelle Methode namens speak(), wodurch die Instanziierung von Objekten dieser Klasse verhindert wird. Dieses Design ist sinnvoll, da der Zweck der virtuellen Methode darin besteht, die charakteristischen Laute jedes Tieres darzustellen.

Durch die Deklaration der Methode als virtuell kann jede Unterklasse ihre eigene Version implementieren, um die Individualität des Tierlauts einzufangen. Die Deklaration als reine virtuelle Methode zeigt an, dass keine Standardimplementierung existiert, und betont die Notwendigkeit konkreter Implementierungen in abgeleiteten Klassen.

main.cpp

main.cpp

copy
1234567
#include "Animal.h" int main() { // cannot declare variable 'animal' to be of abstract type Animal animal; }

Auch dies ist nachvollziehbar. Die Erstellung von Instanzen der Animal-class wäre unpraktisch und widersinnig, da sie ein abstraktes Konzept repräsentiert, das als Kategorie für verschiedene Tiere dient. Es gibt kein spezifisches Verhalten, das mit einem generischen Tier verbunden ist, was die abstrakte Natur der class unterstreicht und die Bedeutung der Erstellung spezialisierter Unterklassen hervorhebt, um die einzigartigen Laute jedes einzelnen Tieres abzubilden.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425262728293031
#include <iostream> class Animal { public: // Pure virtual function to enforce implementation in derived classes virtual void speak() = 0; }; class Cat : public Animal { public: void speak() override { std::cout << "Meow!" << std::endl; } }; class Dog : public Animal { public: void speak() override { std::cout << "Bark!" << std::endl; } }; class Cow : public Animal { public: void speak() override { std::cout << "Moo!" << std::endl; } }; void pet(Animal& animal) { animal.speak(); } int main() { // Replace `Cat` with `Dog` or `Cow` to see their specific behavior Cat cat; pet(cat); }

Obwohl es nicht möglich ist, ein Objekt vom Typ Animal direkt zu erstellen, kann dieser dennoch als Parameter in einer Funktion verwendet werden. Ähnlich wie im vorherigen Button-Beispiel nutzt dieser Ansatz Polymorphie, um ein vielseitiges Programm zu gestalten, das sein Verhalten zur Laufzeit dynamisch ändern kann.

Note
Hinweis

Versuchen Sie, ein Objekt einer anderen class an die Funktion zu übergeben und beobachten Sie die Ausgabe. Versuchen Sie außerdem, ein Objekt der abstrakten class zu erstellen, um zu sehen, wie der Compiler die Instanziierung aufgrund nicht implementierter reiner virtueller Methoden verhindert.

question mark

Was passiert, wenn eine Klasse eine reine virtuelle Methode enthält?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

C++ OOP

C++ OOP

1. Grundlagen der OOP in C++
2. Konstruktoren und Destruktoren
3. Überblick Über Die Kapselung
4. Überblick Über Vererbung
5. Überblick Über Polymorphismus

book
Reine Virtuelle Methode

Das Konzept der virtuellen Methoden ist entscheidend für die Umsetzung von Polymorphie und ermöglicht ein flexibles sowie erweiterbares Softwaredesign. Rein virtuelle Methoden erweitern dies, indem sie Schnittstellen definieren und die dynamische Bindung unterstützen.

Syntax einer rein virtuellen Methode

Eine rein virtuelle Methode wird mit dem Schlüsselwort virtual deklariert und mit null initialisiert. Dies zeigt an, dass die Funktion innerhalb der class keine Definition besitzt und von jeder Unterklasse überschrieben werden muss, bevor Objekte dieser class instanziiert werden können.

virtual.h

virtual.h

copy
1
virtual void example() = 0;

Diese Methode funktioniert ähnlich wie eine gewöhnliche Methode, außer dass sie keinen Rumpf in { } besitzt und stattdessen mit = 0; abgeschlossen wird, was auf eine fehlende Implementierung hinweist. Die übrigen Regeln für diese Methode entsprechen jedoch denen regulärer Methoden.

Die Deklaration einer rein virtuellen Methode macht die class, in der sie deklariert ist, abstrakt, was bedeutet, dass es unmöglich ist, Objekte dieser Klasse zu instanziieren. Diese Einschränkung besteht, weil jede Methode innerhalb der class implementiert werden muss, bevor eine Instanz erstellt und verwendet werden kann, um Fehler und unvorhersehbares Verhalten zu vermeiden. Siehe dir den folgenden Code an:

Animal.h

Animal.h

copy
1234
class Animal { public: virtual void speak() = 0; };

Die Animal-class verfügt über eine reine virtuelle Methode namens speak(), wodurch die Instanziierung von Objekten dieser Klasse verhindert wird. Dieses Design ist sinnvoll, da der Zweck der virtuellen Methode darin besteht, die charakteristischen Laute jedes Tieres darzustellen.

Durch die Deklaration der Methode als virtuell kann jede Unterklasse ihre eigene Version implementieren, um die Individualität des Tierlauts einzufangen. Die Deklaration als reine virtuelle Methode zeigt an, dass keine Standardimplementierung existiert, und betont die Notwendigkeit konkreter Implementierungen in abgeleiteten Klassen.

main.cpp

main.cpp

copy
1234567
#include "Animal.h" int main() { // cannot declare variable 'animal' to be of abstract type Animal animal; }

Auch dies ist nachvollziehbar. Die Erstellung von Instanzen der Animal-class wäre unpraktisch und widersinnig, da sie ein abstraktes Konzept repräsentiert, das als Kategorie für verschiedene Tiere dient. Es gibt kein spezifisches Verhalten, das mit einem generischen Tier verbunden ist, was die abstrakte Natur der class unterstreicht und die Bedeutung der Erstellung spezialisierter Unterklassen hervorhebt, um die einzigartigen Laute jedes einzelnen Tieres abzubilden.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425262728293031
#include <iostream> class Animal { public: // Pure virtual function to enforce implementation in derived classes virtual void speak() = 0; }; class Cat : public Animal { public: void speak() override { std::cout << "Meow!" << std::endl; } }; class Dog : public Animal { public: void speak() override { std::cout << "Bark!" << std::endl; } }; class Cow : public Animal { public: void speak() override { std::cout << "Moo!" << std::endl; } }; void pet(Animal& animal) { animal.speak(); } int main() { // Replace `Cat` with `Dog` or `Cow` to see their specific behavior Cat cat; pet(cat); }

Obwohl es nicht möglich ist, ein Objekt vom Typ Animal direkt zu erstellen, kann dieser dennoch als Parameter in einer Funktion verwendet werden. Ähnlich wie im vorherigen Button-Beispiel nutzt dieser Ansatz Polymorphie, um ein vielseitiges Programm zu gestalten, das sein Verhalten zur Laufzeit dynamisch ändern kann.

Note
Hinweis

Versuchen Sie, ein Objekt einer anderen class an die Funktion zu übergeben und beobachten Sie die Ausgabe. Versuchen Sie außerdem, ein Objekt der abstrakten class zu erstellen, um zu sehen, wie der Compiler die Instanziierung aufgrund nicht implementierter reiner virtueller Methoden verhindert.

question mark

Was passiert, wenn eine Klasse eine reine virtuelle Methode enthält?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 3
some-alt