無名クラスとは、内部クラスの一種ですが、名前のないクラスのことを言います。
class OuterClass{
public:
class{
public:
int num1;
int num2;
int num3;
// だれも呼べないので無意味
void func3( int n ){
num3 = n;
}
};
void func2( int n ){
num2 = n;
func3(n); // エラー
}
};
void main(){
OuterClass out;
out.num1 = 10;
out.func2(20);
out.func3(30); // エラー
}
|
無名クラスは、メンバー関数は定義しません。定義できますが、たとえpublicであっても
その関数を呼び出すことができないからです。また、名前がないため、コンストラクタや
デストラクタも作れません。
さらに、無名クラスの場合、無名クラスのメンバーは全てpublicにします。そうしないと外部
クラスを含めてどこからもアクセスできなくなります。publicなメンバー変数は外部クラスや外部
(例えばmain関数)からアクセスできます。
このように無名クラスは多くの制限があるため、外部クラスのみで使用する単純なデータ構造として
使用されます。
同じような構造体として、無名構造体も定義できます。