警告 C26433
関数は
override
でマークされる必要があります
C++ Core Guidelines
C.128: 仮想関数は、virtual、override、final のうちの 1 つだけを指定する必要があります
コンパイラでは、仮想関数がその基本をオーバーライドすることを明示するように要求されません。 override
を指定しないと、クラス階層で仮想指定が変更された場合に、メンテナンス中に軽度の問題が発生する可能性があります。 また、読みやすさが低下し、インターフェイスのポリモーフィックな動作もわかりにくくなります。 関数が override
として明確にマークされている場合、コンパイラはインターフェイスの一貫性を確認し、実行時に問題が発生する前に問題を特定するのに役立ちます。
メモ
このルールは、デストラクターには適用されません。 デストラクターには独自の仮想性に関する指定があります。
このルールでは、それ自体が特殊な種類の仮想指定子である final
として明示的にマークされた関数にはフラグは設定されません。
警告は、宣言ではなく関数定義に表示されます。 定義に仮想指定子が含まれていないため、紛らわし場合がありますが、これは従来通り適切な警告です。
コード分析名: OVERRIDE_EXPLICITLY
例: 暗黙的なオーバーライド
class Shape {
public:
virtual void Draw() = 0;
// ...
};
class Ellipse : public Shape {
public:
void Draw() { // C26433
//...
}
};