私は(私が作成されていない)他のいくつかのクラスAを拡張し、私のクラスBの内側だ場合、どのようにあなたが書いている方法ことを知っているであろう、意味:新しい方法を書いているのか、既存の方法を上書きするのかをどうやって確認しますか?
void SetStatus() { }
は、それがすでに宣言していませんそれを上書きするだけですか?右クリック→「毎回定義に行く」 (VS2015など)。
私は(私が作成されていない)他のいくつかのクラスAを拡張し、私のクラスBの内側だ場合、どのようにあなたが書いている方法ことを知っているであろう、意味:新しい方法を書いているのか、既存の方法を上書きするのかをどうやって確認しますか?
void SetStatus() { }
は、それがすでに宣言していませんそれを上書きするだけですか?右クリック→「毎回定義に行く」 (VS2015など)。
次のような、(C++ 11以降)override specifierを使用することができます:あなたが期待する何
void SetStatus() override { }
コンパイルエラーを取得することです。取得した場合、関数(つまり、SetStatus()
はここにありません)が宣言されていないか宣言されていますが、署名が一致していません。次に、オーバーライドがないことを確認してoverride specifier
を削除します。
「右クリック→定義に移動」というOPの方が簡単だと思います。 –
コードをお持ちの場合、基本クラスにメソッドfinal
を宣言すると、仮想メソッドをオーバーライドしようとするとコードがコンパイルされません。
これをオーバーライドできるようにしたい場合は、A :: SetStatus()を呼び出すことができます。 B :: SetStatus()の定義に含まれています。
IDEでエラーが表示され、コンパイルされない場合は、Aで実装されていません。 これは「Goto definition」のアプローチと非常によく似ています。
何らかの静的な解析の他に、私はすべての場合に有効な言語機能はないと思います。 – NathanOliver
私はVSのユーザーではありませんが、Eclipse CDTには、メンバー関数が基底クラス関数をオーバーライドまたはシャドウする場合に表示されるエディターの左余白にインジケーターがあります。 VSにも同様のことがありますか? –
@FredLarsonいいえ、VSには何も似ていません。 –