2009-11-25 6 views
5

私たちのC++クラスのうちの1つをカバー率で見直しながら、特定のクラスにエラーメッセージを示しました。クラスは次のとおりです。クラス識別子がクラス宣言内で使用されています。それは良い練習ですか?

class InputRecord 
{ 
    /* Construtor */ 
    ... 
    InputRecord::RejectRecord(); 
    ... 
    /* Destructor */ 
} 

クラス内で識別子を使用する意味は?これに従うのは良い習慣ですか?

おかげで、 マシューLiju

答えて

5

gccコンパイラ(v4.1以降)では、これは "error:extra qualification"でコンパイルできませんでした。したがって、そこに置かないことをお勧めします!

hereを参照してください。これは、法的なC++でない追加の資格について説明しています。

+0

gccだけでなく、Visual Studio以外のコンパイラ。 –

0

やあ、

私は常に識別子の一種のみの実装で使用され、クラス定義では必要ではなかったと思いました。

クラス宣言を使用すると、クラス定義があるんだ何

class InputRecord; 

です。

class InputRecord 
{ 
    /* Construtor */ 
    ... 
    RejectRecord(); 
    ... 
    /* Destructor */ 
} 

は、あなたの.cppファイルに、あなたは一般的に

InputRecord::RejectRecord() 
{ 
    ... 
} 
+0

でもそれは私の理解です。プログラムの変更を決める前に、自分の理解を確認したいだけです。とにかく返信してくれてありがとう:-) –

0

実装を持って、あなたのコードサンプルでは、​​明示的なInputRecord::によって提供さ一義が何である可能性が高い任意の例は存在しません冗長ではありません。

特定のクラスが関連する複雑な操作(コードをシャドウ化されたバージョンを持つ基本クラスに渡している)のコードでは、明示的にコードを明示的にすることができます。

this->(またはC#/ Javaではthis.)のような感じです。

個人的には、このような冗長な指定子を削除して、ポイントを取得する別の方法を見つけます。

+0

実際に私はC++とJavaの両方でメンバー変数にこれを使うように強制するべきだと思うので、mValue、m_value、m_Value、value_などの名前はもう使わないでください。 –

+0

名前を 'm ...'とする必要がありますか? :P機能的プログラミングの観点から、あなたは状態を使う前に思考することを前向きに思っています。オブジェクト指向の観点からは、それは「正常」です。特定のタイプのものについては、これは*本当に*醜いと思われます。いくつかのプログラミングの「標準」では、コードからメンバーまたはパラメータであるかどうかを明確にする必要があるため、プレフィックスはありません。適切なコードを記述していれば問題ありません。 (私は個人的にハンガリー記法を使いませんが、間違っていることを「_」で前置することに固執しています。私はこれがOSFAソリューションがないという明確なケースだと思います。 –

0

クラス定義では、クラスのプライベートメンバーに同じ名前(または同じ名前)のパラメータがある場合にのみ、クラス識別子を使用します。あいまいさを避け、同時にコードを読みやすくします。私はあなたがそれを使う必要がある別のケースを考えることができません。

関連する問題