4

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

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

2 回答 2

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;
};
于 2013-04-08T18:39:22.857 回答
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

于 2013-04-08T19:06:42.460 回答