c ++从嵌套类方法访问变量

时间:2013-04-08 18:30:52

标签: c++ oop

如何从嵌套类方法中访问类属性?

class Class1
{
public:
    int attribute;
    void Method1() { 
        class Class2
        {
            public:
               void Method2() { 
                   //here I need to access attribute from Class1
               }
        };
    }
};

2 个答案:

答案 0 :(得分:2)

您可以将this传递给内部类。例如:

class Class1
{
public:
    Class1() : class2(this) {
    }

    int attribute;
    void Method1() { 
    };

    class Class2
    {
        Class1 *parent;
    public:
        Class2(Class1 *parent) : parent(parent) {
        }
        void Method2() { 
             // parent->attribute
        }
   } class2;
};

答案 1 :(得分:2)

以下是对OP代码进行微小更改的一种方法。

#include <cassert>

class Class1
{
    public:
        Class1( int attribute ) : attribute_( attribute ) {
        }
        void Method1() { 
            class Class2
            {
                public:
                    Class2( Class1 * parent ) : parent_( parent ) {
                    }
                    int parentAttribute() const { 
                        return parent_->attribute_;
                    }
                private:
                    Class1 * parent_;
            };
            Class2 c2( this );
            assert( c2.parentAttribute() == attribute_ );
        }
    private:
        int attribute_;
};

int main() {
    Class1 c1( 42 );;
    c1.Method1();
}

该代码也发布在http://codepad.org/MUF3a8jL