Bagikan melalui


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 .

Lihat juga

Penentu Akhir
Kata kunci