2009-08-25 17 views

答えて

13

インスタンス変数を使用している場合は、ドット演算子を使用してアクセス可能な静的メンバーにアクセスすることができます。

#include <iostream> 
using namespace std; 

class Test{ 
    public: 
     static int no; 
}; 

int Test::no; 
int main(){ 
    cout << "\n" << Test::no; 
    Test::no=100; 
    Test a; 
    cout << "\n" << a.no; 
return 0; 
} 
+0

ありがとう。なぜなら、Test.noのようなクラスの静的メンバ変数にアクセスするが、エラーはないVC表記をドット表記で使用してコードをコンパイルするからです。 – domlao

+4

'Test.no'は静的メンバーを参照する有効な方法ではありません。メンバーアクセス演算子の左側はオブジェクトでなければなりません。したがって、 'Test :: no'または' a.no'です。もちろん、統計的には、 'Test :: no'を好むでしょう。 –

2

ダブルコロンアクセス演算子を使用する必要があります。これはクラス名から静的メンバーにアクセスする唯一の有効な方法です。

+0

OPは、ドットの左側にタイプまたはオブジェクトがあるかどうかを示していないことに注意してください。 – sbi

+0

@スビー、それは私の答えでそれを修飾した理由です:) – JaredPar

+0

@ JaredPar:はい、しかし最後の2番目の単語にのみ。私の反対意見のモジュールはそれ以来ずっと蹴られていた。 ':)' – sbi

2

それは必ずしも「することができます」質問(コンパイラは、多くの場合、警告があなたをオフにできるようになるので)、しかし「あなたべき」という質問ではありません。

スタティックデータメンバーはオブジェクトの一部ではないため、そのように扱うべきではありません。

静的データメンバに「通常の」データメンバとしてアクセスすると、異なるセマンティクスを暗示する可能性があるため、コードを読みにくくする可能性があります(これは通常そうではありません)。

+0

これは、特にテンプレートコードを書くときには、やはり便利です。これは、型名ではなくその型の値を持つだけの静的関数を呼び出すことができます(戻り値の型がtypedefされないテンプレート関数から返される場合など)。おそらく想像するのは難しいでしょう。 –

関連する問題