#include <iostream>
using namespace std;
class Sample{
public:
enum{ x = 10 };
};
int main(){
cout<<Sample::x<<endl;
return 0;
}
メイン関数のスコープ解決演算子を使用して、xのクラスがenumにアクセスできるのはなぜですか?なぜ列挙型解決演算子を使用してenumにアクセスできるのですか?
#include <iostream>
using namespace std;
class Sample{
public:
enum{ x = 10 };
};
int main(){
cout<<Sample::x<<endl;
return 0;
}
メイン関数のスコープ解決演算子を使用して、xのクラスがenumにアクセスできるのはなぜですか?なぜ列挙型解決演算子を使用してenumにアクセスできるのですか?
x
にアクセスするためにSample
をインスタンス化する必要がない理由を質問していると仮定します。その理由は、enum
がtypedef
のようなもので、新しいタイプを作成し、変数を作成しないためです。クラス内のtypedef
またはstruct
/class
宣言にアクセスするのと同じ方法でSample::x
にアクセスできます。
ありがとう!!はい、私の疑いはまさにあなたが言ったことです。しかし、申し訳ありませんが、私はこの行を理解できませんでした "あなたは、typedefやクラス内の構造体/クラス宣言にアクセスするのと同じ方法でSample :: xにアクセスできます。"たとえば、struct A {struct B {};}を実行する場合は、 – niting112
@ niting112です。 }; 'A :: B b;を行うことができます。 –
enum
はpublic
に定義されているためです。 Comment public
キーワードを使用してアクセスすることはできません。公共/非公共エリアで宣言したtypedef
についても同じです。
CPPでenum
sがあなたがstruct or class
でそれらを宣言する場合、彼らはプライベート作られていますつまり、デフォルトで内部リンケージを持っているので。だから::
(スコープ解決演算子)列挙子(列挙定数)にアクセスする必要があります。 Cでは
彼らは、デフォルトでグローバルているので、あなたは直接列挙子にアクセスすることができます。
これがC++言語の定義方法です。 –
@GregHewgill ok..for他のデータ型は有効ですか? – niting112
@ niting112他のすべてのデータ型とtypedef –