C++ c++;从嵌套类方法访问变量
如何从类的嵌套类方法访问类属性C++ c++;从嵌套类方法访问变量,c++,oop,C++,Oop,如何从类的嵌套类方法访问类属性 class Class1 { public: int attribute; void Method1() { class Class2 { public: void Method2() { //here I need to access attribute from Class1 }
class Class1
{
public:
int attribute;
void Method1() {
class Class2
{
public:
void Method2() {
//here I need to access attribute from Class1
}
};
}
};
您可以将
此
传递给内部类。例如:
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;
};
下面是对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();
}
#包括
一班
{
公众:
Class1(int属性):属性(attribute){
}
void Method1(){
二级
{
公众:
类别2(类别1*家长):家长(家长){
}
int parentAttribute()常量{
返回父项->属性;
}
私人:
第1类*家长;
};
第2类c2(本);
断言(c2.parentAttribute()==attribute);
}
私人:
int属性;
};
int main(){
类别c1(42);;
c1.方法1();
}
代码也发布在可能重复的上,我会将此作为方法参数传递,或者在构建
Class2
@refp时传递:您建议的链接有点不同。在Class2::Method2()内部,您需要一些全局访问器函数来查找Class1的this
,这样您就可以访问它的public属性了。或者,您可以将Class1
的这个传递给Class2
,作为Class2
构造函数的一部分,这样它就知道它的父对象是谁,这样它就可以访问Class1
的公共属性。@MM。它归结为同一件事。Class1
始终使用Class2
,这既没有显示也没有指定。如果没有该规范,Class1就不需要总是在Class1
的构造上初始化Class2
。但是这两种方法是完全不同的。否?为什么我不能在另一个方法中声明包含方法的类?我这样做了,它工作了。这只是一个如何调用父方法的示例。他可以用临时的Class2
对象来完成它。@MM。谢谢我以前从未这样做过,这是我今天学到的:-)