Startseite >
Aktuelles > C++ Tipp: Verwenden Sie den `override`- und `final`-Modifizierer
C++ Tipp: Verwenden Sie den `override`- und `final`-Modifizierer
4. November 2014
In C++ bieten die Modifizierer override
und final
zusätzliche Möglichkeiten zur Kontrolle und Verbesserung der Vererbung und Polymorphie. Sie ermöglichen es Ihnen, das Verhalten von Basisklassenfunktionen anzugeben und die Änderung oder Weiterleitung von Funktionen in abgeleiteten Klassen einzuschränken.
Der override
-Modifizierer:
Der override
-Modifizierer wird verwendet, um anzuzeigen, dass eine Funktion in einer abgeleiteten Klasse eine Funktion in der Basisklasse überschreibt. Dies hilft dabei, Tippfehler oder fehlerhafte Funktionssignaturen zu erkennen und sicherzustellen, dass die Funktion tatsächlich eine bereits vorhandene Funktion überschreibt.
Der final
-Modifizierer:
Der final
-Modifizierer wird verwendet, um anzuzeigen, dass eine Funktion in einer abgeleiteten Klasse nicht weiter überschrieben werden kann. Dies ist nützlich, wenn Sie sicherstellen möchten, dass eine bestimmte Funktion nicht in einer weiteren abgeleiteten Klasse geändert wird.
Ein Beispiel zur Verwendung von override
und final
:
#include
class Shape
{
public:
virtual void draw() const = 0;
virtual void resize(int width, int height);
};
class Circle : public Shape
{
public:
void draw() const override;
void resize(int width, int height) override final;
};
class ColoredCircle : public Circle
{
public:
void draw() const override; // Fehler: Versuch, finalisierte Funktion zu überschreiben
};
void Shape::resize(int width, int height)
{
// Implementierung der Funktion
}
void Circle::draw() const
{
// Implementierung der Funktion
}
void Circle::resize(int width, int height)
{
// Implementierung der Funktion
}
void ColoredCircle::draw() const
{
// Implementierung der Funktion
}
In diesem Beispiel wird eine abstrakte Basisklasse `Shape` definiert, die eine reine virtuelle Funktion `draw()` enthält. Die Klasse `Circle` erbt von `Shape` und implementiert die Funktion `draw()`. Die Funktion `resize()` wird in der Basisklasse definiert und in der abgeleiteten Klasse `Circle` überschrieben.
Die Klasse `Circle` verwendet den `override`-Modifizierer, um sicherzustellen, dass die Funktion `draw()` tatsächlich die Funktion in der Basisklasse überschreibt. Darüber hinaus wird die Funktion `resize()` mit dem `final`-Modifizierer markiert, um zu verhindern, dass sie in weiteren abgeleiteten Klassen überschrieben wird.
Die Klasse `ColoredCircle` versucht, die Funktion `draw()` zu überschreiben, was jedoch zu einem Fehler führt, da die Funktion `resize()` in `Circle` als final markiert ist.