【C++入門】ネストされたクラス(入れ子クラス)の定義方法と使い方
ネストされたクラスとは
ネストされたクラス(入れ子クラス)とは、別のクラスの内部で宣言されたクラスのことです。ネストされたクラスは、それを囲む外側のクラスのメンバーの一つとして扱われ、他のメンバーと同じアクセス権限を持ちます。
ただし注意点として、外側のクラスのメンバー関数が、ネストされたクラスのメンバーに対して特別なアクセス権を持つことはありません。つまり、外側のクラスだからといって、ネストされたクラスのprivateメンバーに自由にアクセスできるわけではありません。
以下に、C++におけるネストされたクラスの基本的な使用例を示します。
サンプルプログラム
#include<iostream>
using namespace std;
class A {
public:
class B {
private:
int num;
public:
void getdata(int n) {
num = n;
}
void putdata() {
cout<<"The number is "<<num;
}
};
};
int main() {
cout<<"Nested classes in C++"<< endl;
A :: B obj;
obj.getdata(9);
obj.putdata();
return 0;
}実行結果
Nested classes in C++ The number is 9
プログラムの解説
上記のプログラムでは、クラスBがクラスAの内部で定義されているため、Bはネストされたクラスとなります。クラスBは、private変数numと、public関数getdata()およびputdata()を持っています。getdata()は引数として渡された値をnumに格納し、putdata()はその値を画面に表示します。該当するコード部分は次のとおりです。
class A {
public:
class B {
private:
int num;
public:
void getdata(int n) {
num = n;
}
void putdata() {
cout<<"The number is "<<num;
}
};
};main()関数内では、A :: B obj;のようにスコープ解決演算子「::」を使用することで、外側のクラスAの内部にあるクラスBのオブジェクトを生成しています。その後、オブジェクトobjを通じてgetdata()とputdata()を呼び出しています。該当するコード部分は次のとおりです。
cout<<"Nested classes in C++"<< endl; A :: B obj; obj.getdata(9); obj.putdata();
ネストされたクラスを使う際のポイント
- 外側のクラスの外部からネストされたクラスにアクセスするには、「外側のクラス名 :: ネストされたクラス名」という形式でスコープ解決演算子を指定する必要があります。
- ネストされたクラスを利用すると、密接に関連するクラスをひとつのクラスの中にまとめられるため、コードのカプセル化や論理的なグループ化に役立ちます。
- ネストされたクラスの宣言をprivate領域に置けば、外部からの使用を制限することも可能です。
-
C#のネストされたクラス(入れ子クラス)とは?基本と使い方をわかりやすく解説
ネストされたクラス(入れ子クラス)とは、別のクラス(外側のクラス)の中で宣言されたクラスのことです。ネストされたクラスは外側のクラスの一つのメンバーとして扱われますが、外側のクラスのメンバーからネストされたクラスのメンバーへ直接アクセスすることはできません。 ネストされたクラスの基本的な特徴 クラス宣言の中に、さらに別のクラスを宣言できる ネストされたクラスは外側のクラスのメンバーとして存在する アクセス修飾子(public、private、internal など)によって、外部からのアクセス範囲を制御できる インスタンス化する際は「外側のクラス名.ネストされたクラス名」のように修飾して指定
-
C#のネストされたクラス(入れ子クラス)とは?基本構文と使い方をわかりやすく解説
ネストされたクラス(入れ子クラス)とはネストされたクラス(nested class/入れ子クラス)とは、別のクラス(外側のクラス=エンクロージングクラス)の中で宣言されたクラスのことです。ネストされたクラスは、その外側のクラスのメンバーとして扱われます。ここで重要なポイントは、外側のクラスのメンバーは、ネストされたクラスのメンバーに直接アクセスできないという点です。両者はあくまで独立した存在であり、アクセス修飾子に従ってアクセスを制御する必要があります。C#におけるネストされたクラスのコード例以下は、C#でネストされたクラスを定義・利用するサンプルコードです。class One { p