C++
 Computer >> コンピューター >  >> プログラミング >> C++

【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領域に置けば、外部からの使用を制限することも可能です。
  1. C#のネストされたクラス(入れ子クラス)とは?基本と使い方をわかりやすく解説

    ネストされたクラス(入れ子クラス)とは、別のクラス(外側のクラス)の中で宣言されたクラスのことです。ネストされたクラスは外側のクラスの一つのメンバーとして扱われますが、外側のクラスのメンバーからネストされたクラスのメンバーへ直接アクセスすることはできません。 ネストされたクラスの基本的な特徴 クラス宣言の中に、さらに別のクラスを宣言できる ネストされたクラスは外側のクラスのメンバーとして存在する アクセス修飾子(public、private、internal など)によって、外部からのアクセス範囲を制御できる インスタンス化する際は「外側のクラス名.ネストされたクラス名」のように修飾して指定

  2. C#のネストされたクラス(入れ子クラス)とは?基本構文と使い方をわかりやすく解説

    ネストされたクラス(入れ子クラス)とはネストされたクラス(nested class/入れ子クラス)とは、別のクラス(外側のクラス=エンクロージングクラス)の中で宣言されたクラスのことです。ネストされたクラスは、その外側のクラスのメンバーとして扱われます。ここで重要なポイントは、外側のクラスのメンバーは、ネストされたクラスのメンバーに直接アクセスできないという点です。両者はあくまで独立した存在であり、アクセス修飾子に従ってアクセスを制御する必要があります。C#におけるネストされたクラスのコード例以下は、C#でネストされたクラスを定義・利用するサンプルコードです。class One { p