2012-02-26 10 views
1
#include <iostream> 

using namespace std; 

class Sample{ 
public: 
    enum{ x = 10 }; 
}; 

int main(){ 
    cout<<Sample::x<<endl; 
    return 0; 
} 

メイン関数のスコープ解決演算子を使用して、xのクラスがenumにアクセスできるのはなぜですか?なぜ列挙型解決演算子を使用してenumにアクセスできるのですか?

+6

これがC++言語の定義方法です。 –

+0

@GregHewgill ok..for他のデータ型は有効ですか? – niting112

+0

@ niting112他のすべてのデータ型とtypedef –

答えて

7

xにアクセスするためにSampleをインスタンス化する必要がない理由を質問していると仮定します。その理由は、enumtypedefのようなもので、新しいタイプを作成し、変数を作成しないためです。クラス内のtypedefまたはstruct/class宣言にアクセスするのと同じ方法でSample::xにアクセスできます。

+0

ありがとう!!はい、私の疑いはまさにあなたが言ったことです。しかし、申し訳ありませんが、私はこの行を理解できませんでした "あなたは、typedefやクラス内の構造体/クラス宣言にアクセスするのと同じ方法でSample :: xにアクセスできます。"たとえば、struct A {struct B {};}を実行する場合は、 – niting112

+0

@ niting112です。 }; 'A :: B b;を行うことができます。 –

1

enumpublicに定義されているためです。 Comment publicキーワードを使用してアクセスすることはできません。公共/非公共エリアで宣言したtypedefについても同じです。

0

CPPでenum sがあなたがstruct or classでそれらを宣言する場合、彼らはプライベート作られていますつまり、デフォルトで内部リンケージを持っているので。だから::スコープ解決演算子列挙子(列挙定数)にアクセスする必要があります。 Cでは

彼らは、デフォルトでグローバルているので、あなたは直接列挙子にアクセスすることができます。

関連する問題