mengesampingkan Penentu
Anda dapat menggunakan kata kunci penimpaan untuk menunjuk fungsi anggota yang mengambil alih fungsi virtual di kelas dasar.
Sintaks
function-declaration override;
Keterangan
penimpaan peka konteks dan memiliki arti khusus hanya ketika digunakan setelah deklarasi fungsi anggota; jika tidak, itu bukan kata kunci yang dipesan.
Contoh
Gunakan ambil alih untuk membantu mencegah perilaku warisan yang tidak disengaja dalam kode Anda. Contoh berikut menunjukkan di mana, tanpa menggunakan penimpaan, perilaku fungsi anggota dari kelas turunan mungkin belum dimaksudkan. Pengkompilasi tidak memancarkan kesalahan apa pun untuk kode ini.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA(); // ok, works as intended
virtual void funcB(); // DerivedClass::funcB() is non-const, so it does not
// override BaseClass::funcB() const and it is a new member function
virtual void funcC(double = 0.0); // DerivedClass::funcC(double) has a different
// parameter type than BaseClass::funcC(int), so
// DerivedClass::funcC(double) is a new member function
};
Saat Anda menggunakan penimpaan, pengkompilasi menghasilkan kesalahan alih-alih membuat fungsi anggota baru secara diam-diam.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA() override; // ok
virtual void funcB() override; // compiler error: DerivedClass::funcB() does not
// override BaseClass::funcB() const
virtual void funcC( double = 0.0 ) override; // compiler error:
// DerivedClass::funcC(double) does not
// override BaseClass::funcC(int)
void funcD() override; // compiler error: DerivedClass::funcD() does not
// override the non-virtual BaseClass::funcD()
};
Untuk menentukan bahwa fungsi tidak dapat ditimpa dan kelas tersebut tidak dapat diwariskan, gunakan kata kunci akhir .