Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Virtual- und Override-Schlüsselwörter | Ü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
Virtual- und Override-Schlüsselwörter

Virtual-Schlüsselwort

Das Schlüsselwort virtual wird vor einer Methodendeklaration in einer class verwendet, um das zuvor besprochene Problem zu lösen. Es wird für Methoden eingesetzt, die allen Unterklassen gemeinsam sind, aber unterschiedliche Implementierungen erfordern. Im Wesentlichen sieht es wie jede andere Methodendeklaration aus, beginnt jedoch mit virtual.

Base.h

Base.h

copy
1234567
class Base { public: virtual void display() { std::cout << "Base class display() called" << std::endl; } };

Wenn eine Funktion in einer Oberklasse als virtual deklariert wird, kann sie in einer Unterklasse überschrieben werden. Das bedeutet, dass die Unterklasse ihre eigene Implementierung bereitstellen kann, die anstelle der ursprünglichen Implementierung aufgerufen wird, wenn die Funktion über einen Zeiger oder eine Referenz auf die Oberklasse aufgerufen wird.

main.cpp

main.cpp

copy
123456789101112131415161718192021222324252627
#include <iostream> class Base { public: virtual void display() { std::cout << "Base display() called" << std::endl; } }; class Derived : public Base { public: void display() { std::cout << "Derived display() called" << std::endl; } }; int main() { Base* obj; Derived derived; obj = &derived; obj->display(); }
Note
Hinweis

Wenn ein Zeiger auf ein Objekt vorliegt und auf dessen Member über den Zeiger zugegriffen werden soll, wird der Pfeiloperator (->) verwendet.

Bezogen auf die Lösung des ursprünglichen Problems mit Buttons ermöglicht diese Methode das einfache Erstellen einer einzigen Funktion, die einen Eltern-Button-Zeiger als Parameter übernimmt. Dadurch kann diese Funktion mit einem SubmitButton, ResetButton oder CancelButton aufgerufen werden und verhält sich wie vorgesehen.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425262728293031
#include <iostream> class Button { public: virtual void onClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } }; class ResetdButton : public Button { public: void onClick() { std::cout << "Reset" << std::endl; } }; class CancelButton : public Button { public: void onClick() { std::cout << "Cancel" << std::endl; } }; void user_clicked_button(Button& btn) { btn.onClick(); } int main() { UploadButton uploadButton; user_clicked_button(uploadButton); }
Note
Hinweis

Versuch, Objekte verschiedener Unterklassen zu erstellen und an die Funktion zu übergeben.

Das Override-Schlüsselwort

Das Schlüsselwort override wird in einer Unterklasse verwendet, um explizit anzugeben, dass eine Memberfunktion eine virtuelle Funktion aus einer Oberklasse überschreibt. Es hilft, Fehler zur Compile-Zeit zu erkennen, falls die Funktionssignatur in der Unterklasse keiner virtuellen Funktion in der Oberklasse entspricht.

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> class Button { public: virtual void handleClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: // marked override, but does not override void onClick() override { std::cout << "Upload" << std::endl; } }; int main() { }

Wenn ein Fehler auftritt, wie zum Beispiel ein Tippfehler in der Funktionssignatur oder die Oberklasse die Funktion, die Sie überschreiben möchten, nicht besitzt, wird der Compiler einen Fehler erzeugen. Dies hilft, potenzielle Fehler bereits zur Kompilierzeit zu erkennen. Diese Funktion ist besonders in großen Teamumgebungen nützlich, in denen das Nachverfolgen von Änderungen wie Methoden-Umbenennungen eine Herausforderung darstellen kann.

question mark

Was ist der Hauptzweck des Schlüsselworts virtual?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 2

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
Virtual- und Override-Schlüsselwörter

Virtual-Schlüsselwort

Das Schlüsselwort virtual wird vor einer Methodendeklaration in einer class verwendet, um das zuvor besprochene Problem zu lösen. Es wird für Methoden eingesetzt, die allen Unterklassen gemeinsam sind, aber unterschiedliche Implementierungen erfordern. Im Wesentlichen sieht es wie jede andere Methodendeklaration aus, beginnt jedoch mit virtual.

Base.h

Base.h

copy
1234567
class Base { public: virtual void display() { std::cout << "Base class display() called" << std::endl; } };

Wenn eine Funktion in einer Oberklasse als virtual deklariert wird, kann sie in einer Unterklasse überschrieben werden. Das bedeutet, dass die Unterklasse ihre eigene Implementierung bereitstellen kann, die anstelle der ursprünglichen Implementierung aufgerufen wird, wenn die Funktion über einen Zeiger oder eine Referenz auf die Oberklasse aufgerufen wird.

main.cpp

main.cpp

copy
123456789101112131415161718192021222324252627
#include <iostream> class Base { public: virtual void display() { std::cout << "Base display() called" << std::endl; } }; class Derived : public Base { public: void display() { std::cout << "Derived display() called" << std::endl; } }; int main() { Base* obj; Derived derived; obj = &derived; obj->display(); }
Note
Hinweis

Wenn ein Zeiger auf ein Objekt vorliegt und auf dessen Member über den Zeiger zugegriffen werden soll, wird der Pfeiloperator (->) verwendet.

Bezogen auf die Lösung des ursprünglichen Problems mit Buttons ermöglicht diese Methode das einfache Erstellen einer einzigen Funktion, die einen Eltern-Button-Zeiger als Parameter übernimmt. Dadurch kann diese Funktion mit einem SubmitButton, ResetButton oder CancelButton aufgerufen werden und verhält sich wie vorgesehen.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425262728293031
#include <iostream> class Button { public: virtual void onClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } }; class ResetdButton : public Button { public: void onClick() { std::cout << "Reset" << std::endl; } }; class CancelButton : public Button { public: void onClick() { std::cout << "Cancel" << std::endl; } }; void user_clicked_button(Button& btn) { btn.onClick(); } int main() { UploadButton uploadButton; user_clicked_button(uploadButton); }
Note
Hinweis

Versuch, Objekte verschiedener Unterklassen zu erstellen und an die Funktion zu übergeben.

Das Override-Schlüsselwort

Das Schlüsselwort override wird in einer Unterklasse verwendet, um explizit anzugeben, dass eine Memberfunktion eine virtuelle Funktion aus einer Oberklasse überschreibt. Es hilft, Fehler zur Compile-Zeit zu erkennen, falls die Funktionssignatur in der Unterklasse keiner virtuellen Funktion in der Oberklasse entspricht.

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> class Button { public: virtual void handleClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: // marked override, but does not override void onClick() override { std::cout << "Upload" << std::endl; } }; int main() { }

Wenn ein Fehler auftritt, wie zum Beispiel ein Tippfehler in der Funktionssignatur oder die Oberklasse die Funktion, die Sie überschreiben möchten, nicht besitzt, wird der Compiler einen Fehler erzeugen. Dies hilft, potenzielle Fehler bereits zur Kompilierzeit zu erkennen. Diese Funktion ist besonders in großen Teamumgebungen nützlich, in denen das Nachverfolgen von Änderungen wie Methoden-Umbenennungen eine Herausforderung darstellen kann.

question mark

Was ist der Hauptzweck des Schlüsselworts virtual?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 2
some-alt