はじめに

C++においても、Javaと同様にインナークラスを定義し利用することが可能です。

C++でのインナークラスの定義および利用方法を以下に示します。

インナークラスの定義および利用方法

C++にてインナークラスの定義および利用するには、以下のようにします。

サンプルコード
#include <stdio.h>

class OuterClass
{
    public: OuterClass()
    {
        puts("OuterClass() が呼ばれました。");
    }

    public: ~OuterClass()
    {
        puts("~OuterClass() が呼ばれました。");
    }

    class InnerClass
    {
        public: InnerClass()
        {
            puts("InnerClass() が呼ばれました。");
        }
    
        public: ~InnerClass()
        {
            puts("~InnerClass() が呼ばれました。");
        }
    };
};

void main()
{
    OuterClass::InnerClass *tInnerClass=new OuterClass::InnerClass();
    delete tInnerClass;
}

インナークラスを利用するには、後半部分にあるように、スコープ演算子「::」を利用してインスタンス化するインナークラスを指定します。

C++のインナークラスがJavaとものと大きく異なる点は、C++ではそのインナークラスが属するクラス(アウタークラス)がインスタンス化されていなくても、インナークラスのインスタンスが生成できる点です。

このため、C++のインナークラスはJavaのpackage代わりに利用することが多いです。

インナークラスの中にインナークラスを定義する

蛇足ですが、先ほど定義したインナークラスの中に、さらにインナークラスを定義することができます。
その際の定義と利用方法について、以下に示します。

サンプルコード
#include <stdio.h>

class OuterClass
{
public:

    OuterClass()
    {
        puts("OuterClass() が呼ばれました。");
    }

    ~OuterClass()
    {
        puts("~OuterClass() が呼ばれました。");
    }

    class InnerClass
    {
    public:

        InnerClass()
        {
            puts("InnerClass() が呼ばれました。");
        }
    
        ~InnerClass()
        {
            puts("~InnerClass() が呼ばれました。");
        }

        class Inner2Class
        {
        public:

            Inner2Class()
            {
                puts("Inner2Class() が呼ばれました。");
            }
    
            ~Inner2Class()
            {
                puts("~Inner2Class() が呼ばれました。");
            }
        };
    };
};


void main()
{
    OuterClass::InnerClass::Inner2Class *tInner2Class
            =new OuterClass::InnerClass::Inner2Class();
    delete tInner2Class;
}

インナークラスのインナークラスを指定するには、スコープ演算子「::」を多重に指定します。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まさにこれだ
2 (17%)
参考になった
6 (50%)
ちょっと違う
1 (8%)
これじゃない
3 (25%)

表示できるメッセージはありません。