class Base
{
public:
virtual void func(int);
};
class Derived : public Base
{
public:
void func(int) override;
};
void Base::func(int n)
{
public:
std::cout << "Base::func [" << n << "]" << std::endl;
}
void Derived::func(int n)
{
std::cout << "Derived::func " << n << "]" << std::endl;
}Hätten wir einen der folgenden Fehler gemacht, würde uns der Übersetzer bei
Verwendung von override nun neuerdings darauf aufmerksam machen:
- In Klasse
Derived:void fumc(int) override;- Tippfehler im Namen der Funktion - In Klasse
Derived:void func(long) override;- Fehler bei einem Formalparametertyp - In Klasse
Base:void func(int);- Schlüsselwortvirtualin KlasseBasevergessen
Mit dem neuen Schlüsselwort final lassen sich Methoden und Klassen markieren,
die nicht mehr überschrieben werden dürfen.
class Driver
{
public:
virtual void send(int) {};
};
class KeyboardDriver : public Driver
{
public:
void send(int) final {}; // cannot be overriden anymore
};
class MouseDriver final : public Driver // cannot be used as base class anymore
{
public:
void send(int) {}; // cannot be overriden anymore
};Unter Verwendung von final wird zum Beispiel verhindert, dass die folgenden Anweisungen
zulässig sind:
class TrackballDriver : public MouseDriver
{};class SpecialKeyboardDriver : public KeyboardDriver
{
public:
void send(int) final;
};