2016-07-29 2 views
4

私は(私が作成されていない)他のいくつかのクラスAを拡張し、私のクラスBの内側だ場合、どのようにあなたが書いている方法ことを知っているであろう、意味:新しい方法を書いているのか、既存の方法を上書きするのかをどうやって確認しますか?

void SetStatus() { } 

は、それがすでに宣言していませんそれを上書きするだけですか?右クリック→「毎回定義に行く」 (VS2015など)。

+0

何らかの静的な解析の他に、私はすべての場合に有効な言語機能はないと思います。 – NathanOliver

+0

私はVSのユーザーではありませんが、Eclipse CDTには、メンバー関数が基底クラス関数をオーバーライドまたはシャドウする場合に表示されるエディターの左余白にインジケーターがあります。 VSにも同様のことがありますか? –

+1

@FredLarsonいいえ、VSには何も似ていません。 –

答えて

0

次のような、(C++ 11以降)override specifierを使用することができます:あなたが期待する何

void SetStatus() override { } 

コンパイルエラーを取得することです。取得した場合、関数(つまり、SetStatus()はここにありません)が宣言されていないか宣言されていますが、署名が一致していません。次に、オーバーライドがないことを確認してoverride specifierを削除します。

+0

「右クリック→定義に移動」というOPの方が簡単だと思います。 –

1

コードをお持ちの場合、基本クラスにメソッドfinalを宣言すると、仮想メソッドをオーバーライドしようとするとコードがコンパイルされません。

これをオーバーライドできるようにしたい場合は、A :: SetStatus()を呼び出すことができます。 B :: SetStatus()の定義に含まれています。

IDEでエラーが表示され、コンパイルされない場合は、Aで実装されていません。 これは「Goto definition」のアプローチと非常によく似ています。

関連する問題