C ++仮想関数を安全にオーバーライドする
仮想関数を含む基本クラスがあり、派生クラスでその関数をオーバーライドしたい。派生クラスで宣言した関数が実際に基本クラスの関数をオーバーライドするかどうかをコンパイラに確認させる方法はありますか?古い関数を上書きするのではなく、誤って新しい関数を宣言していないことを保証するマクロまたは何かを追加したいと思います。 この例を見てみましょう: 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); } のparent::handle_event()代わりにここで呼び出されますchild::handle_event()。これは、子のメソッドがconst宣言を欠落しているため、新しいメソッドが宣言されているためです。これは、関数名のタイプミスまたはパラメータータイプのわずかな違いの可能性もあります。また、基本クラスのインターフェイスが変更された場合や、派生クラスが変更を反映するように更新されなかった場合にも、簡単に発生する可能性があります。 この問題を回避する方法はありますか?コンパイラまたは他のツールにこれをチェックするように指示することはできますか?役立つコンパイラフラグ(できればg ++)これらの問題をどのように回避しますか?