警告 C26435
仮想関数 'symbol' には、'virtual'、'override'、または 'final' のいずれかを正確に指定する必要があります (c.128)
C++ Core Guidelines
C.128: 仮想関数は、virtual、override、final のうちの 1 つだけを指定する必要があります
読みやすさを向上させるために、仮想動作の種類を明確にし、不要な冗長性を持たせずに説明する必要があります。 複数の仮想指定子を同時に使用することもできますが、仮想動作の最も重要な側面を強調するために、一度に 1 つ指定する方が良いです。 次の重要度の順序が明らかです。
- プレーン仮想関数。
- そのベースを明示的にオーバーライドする仮想関数。
- その基本をオーバーライドし、現在の継承チェーンの最終的な実装を提供する仮想関数。
メモ
- このルールは、仮想性に関する特別なルールを持つデストラクターをスキップします。
- 警告は、宣言ではなく関数定義に表示されます。 定義に仮想指定子が含まれていないために紛らわしい場合がありますが、それでも警告は適切です。
コード分析名: SINGLE_VIRTUAL_SPECIFICATION
例: 冗長指定子
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'.
//...
}
};