AUTOSAR C++14 Rule A10-3-1
Virtual function declaration shall contain exactly one of the three specifiers:(1) virtual, (2) override, (3) final
説明
ルール定義
Virtual function declaration shall contain exactly one of the three specifiers:(1) virtual, (2) override, (3) final.
根拠
バーチャル関数は、クラス階層にポリモーフィックな動作を実装します。基底クラスで関数を virtual として宣言すると、派生クラス内に同じパラメーター リストをもつすべての関数のインスタンスによって基底関数が暗黙的にオーバーライドされます。ポリモーフィックな関数の実装をコンパイラによるこの暗黙的アクションに依存している場合は、エラーにつながる可能性があります。次に例を示します。
関数が誤って
virtualになる可能性があります。これは、その署名が基底クラス内のバーチャル関数と一致するためです。関数が誤って非バーチャルになる可能性があります。これは、パラメーター リストに違いがあるためです。
バーチャル関数を暗黙的に宣言すると、コードが読みにくくなる可能性もあります。
不注意によるエラーを回避し、可読性を向上させるには、指定子の virtual、override、または final を使用して、バーチャル関数またはオーバーライドする関数を明示的に定義します。1 つの宣言内でこれらの指定子を 2 つ以上使用すると、冗長になったり、エラーの原因になるため、これらの指定子は必ず 1 つだけ使用します。
新しいバーチャル関数を宣言する場合は
virtualのみ。バーチャル関数の非最終のオーバーライドする関数を宣言する場合は
overrideのみ。バーチャル関数の最終のオーバーライドする関数を宣言する場合は
finalのみ。
Polyspace 実装
Polyspace® は、以下の場合にバーチャル関数の宣言にフラグを設定します。
宣言でどの指定子も使用されていない。
宣言で 2 つ以上の指定子が使用されている。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 派生クラス |
| カテゴリ: Required、Automated |
バージョン履歴
R2020a で導入