Saya memiliki kelas dasar dengan fungsi virtual dan saya ingin mengganti fungsi itu di kelas turunan. Adakah cara untuk membuat compiler memeriksa apakah fungsi yang saya deklarasikan di kelas turunan benar-benar menggantikan fungsi di kelas dasar? Saya ingin menambahkan beberapa makro atau sesuatu yang memastikan bahwa saya tidak secara tidak sengaja mendeklarasikan fungsi baru, alih-alih menimpa yang lama.
Ambil contoh ini:
class parent {
public:
virtual void handle_event(int something) const {
// boring default code
}
};
class child : public parent {
public:
virtual void handle_event(int something) {
// new exciting code
}
};
int main() {
parent *p = new child();
p->handle_event(1);
}
Di sini parent::handle_event()
dipanggil alih-alih child::handle_event()
, karena metode anak melewatkan const
deklarasi dan karenanya mendeklarasikan metode baru. Ini juga bisa menjadi kesalahan ketik pada nama fungsi atau beberapa perbedaan kecil dalam tipe parameter. Ini juga dapat dengan mudah terjadi jika antarmuka kelas dasar berubah dan di suatu tempat beberapa kelas turunan tidak diperbarui untuk mencerminkan perubahan tersebut.
Adakah cara untuk menghindari masalah ini, dapatkah saya memberi tahu kompiler atau alat lain untuk memeriksanya untuk saya? Adakah tanda compiler yang berguna (sebaiknya untuk g ++)? Bagaimana Anda menghindari masalah ini?