それが言うC++ 11 FDIS
仮想関数がvirt-specifierオーバーライドでマークされていて、基本クラスのメンバー関数をオーバーライドしていない場合、プログラムは不正な形式です。 [例:
struct B { virtual void f(int); }; struct D : B { void f(long) override; // error: wrong signature overriding B::f void f(int) override; // OK };
- 仮に B::f
は仮想とマークされていなかったのでしょうか?それでは、プログラムの形式は正しくありませんか?またはoverride
は無視されます `。 stdテキストでこのケースの処理を見つけることができません。
1/2を更新(マージ)物事を調べるためにC++エディタにリクエストを転送しました。それを私に指摘してくれてありがとうJohannes.
しかし、これを実現すると、「オーバーライド」コンテキストキーワードの意図が満たされなくなることがわかります。関数名のタイプミスまたは誤った引数タイプが関数自体を非仮想にすると、標準のテキストは適用されません- -「オーバーライド」は役に立たなくなります。
最善の解決策は
仮に
B::f
は仮想としてマークされていませんでしたか?それでは、プログラムの形式は間違っていますか?
はい、そうです。 override何かにするために、その何かはto仮想である。それ以外の場合はoverridingではなく、hiding。したがって、あなたの質問の引用から肯定的な答えが得られます。
B:f
は非仮想だったので、-両方D:f
関数の形式が正しくありません。
はい、override
を非仮想関数に追加すると、プログラムの形式が正しくありません。
一般に、シグネチャが異なる(オーバーロードされた)関数は、名前が異なる関数と同じように異なります。仕様に示されている例は、関数名がoverride
に影響することを意味するものではありません。これは、override
が防止するように設計されている一般的なエラーを示すことを目的としています。