Bagikan melalui


Peringatan C26435

Fungsi virtual 'simbol' harus menentukan tepat salah satu dari 'virtual', 'override', atau 'final' (c.128)

Panduan Inti C++

C.128: Fungsi virtual harus menentukan tepat salah satu virtual, penimpaan, atau final

Untuk meningkatkan keterbacaan, jenis perilaku virtual harus dinyatakan dengan jelas dan tanpa redundansi yang tidak perlu. Meskipun beberapa penentu virtual dapat digunakan secara bersamaan, lebih baik menentukan satu per satu untuk menekankan aspek terpenting dari perilaku virtual. Urutan kepentingan berikut ini jelas:

  • fungsi virtual biasa;
  • fungsi virtual yang secara eksplisit mengambil alih basisnya;
  • fungsi virtual yang mengambil alih dasarnya dan menyediakan implementasi akhir dalam rantai warisan saat ini.

Catatan

  • Aturan ini melewati destruktor karena mereka memiliki aturan khusus mengenai virtualitas.
  • Peringatan muncul pada definisi fungsi, bukan deklarasi. Mungkin membingungkan, karena definisi tidak memiliki penentu virtual, tetapi peringatannya masih sesuai.

Nama analisis kode: SINGLE_VIRTUAL_SPECIFICATION

Contoh: Penentu redundan

class Ellipse : public Shape {
public:
    void Draw() override {
        //...
    }
};

class Circle : public Ellipse {
public:
    void Draw() override final { // C26435, only 'final' is necessary.
        //...
    }
    virtual void DrawCircumference() final { // C26435, should be neither 'virtual' nor 'final'.
        //...
    }
};

Lihat juga

C.128: Fungsi virtual harus menentukan tepat salah satu virtual, penimpaan, atau final