0
#include <iostream>

class Outer
{
    int o;
public:
    void setOuter(int o)
    {
        this->o=o;
    }
    class Inner
    {
    public:
        int i;
        int retOuter(Outer *obj)
        {
            return obj->o;
        }
    };
};

int main(int argc, char **argv) {
    Outer::Inner obj;
    obj.i=20;
    std::cout<<"Inner i = "<<obj.i<<std::endl;

    Outer *obj1=new Outer;
    obj1->setOuter(40);
    std::cout<<"Outer o = "<<obj.retOuter(obj1)<<std::endl;

    obj1->Inner::i =50; //Access the inner class members by Outer class object!
}

上記のコードは、最後の行を除いてすべて問題ありません。外部クラス オブジェクトを使用して内部クラス メンバーにアクセスできないのはなぜですか? 外部クラス オブジェクトには、すべてのパブリック メンバー アクセスが必要class Outerです。外部クラスに含まれているため、内部クラス オブジェクトを作成したときの動作はどうですか!

4

1 に答える 1

5

Inner別のスコープで定義された単なるクラスです。と言うのと変わらない

class Inner
{
public:
    int i;
    int retOuter(Outer *obj)
    {
        return obj->o;
    }
};

その後

Inner::i =50

ではないため、明らかにi不可能staticです。

内部クラスを宣言しても、その構文を使用してアクセスできる外部クラスのその型のメンバーが自動的に宣言されるわけではありません。

さて、次のようなもの:

class Outer
{
    int o;
public:
    void setOuter(int o)
    {
        this->o=o;
    }
    class Inner
    {
    public:
        int i;
        int retOuter(Outer *obj)
        {
            return obj->o;
        }
    } innerMember;
    //    ^^^
    // declare a member
};

int main(int argc, char **argv) {
    Outer *obj1=new Outer;
    obj1->innerMember.i =50; //Access the inner class members by Outer class object!
}

動作します。

于 2013-04-05T20:46:10.557 に答える