访问封闭 class [嵌套 类] 的受保护成员
Access Protected Members of a enclosing class [Nested Classes]
我得到了以下代码:
class enclosing{
protected:
int var1 = 2;
int var2 = 4;
public:
class problem{
friend enclosing;
public:
void DoStuff(enclosing&e1){
int Sum = e1.var1 + e1.var2;
}
}i1;
}e1;
我的问题是,如何访问封闭 class 的受保护成员变量?
这甚至合法吗?
必须通过封闭 class 的对象访问数据成员。例如
void DoStuff( const enclosing &e){
int Sum = e.var1 + e.var2;
}
你的友谊倒退了 - class 不能宣称自己是别人的朋友。
与 Java 的 "inner classes" 不同,class 中定义的 class 不会自动访问 class 的实例定义它 - "inner" class 是完全独立的,您需要将它传递给您希望它使用的实例。
像这样:
class enclosing
{
protected:
int var1 = 2;
int var2 = 4;
public:
friend class problem;
class problem
{
public:
void DoStuff(enclosing& e){
int Sum = e.var1 + e.var2;
}
} i1;
} e1;
int main()
{
e1.i1.DoStuff(e1);
enclosing e2;
e2.i1.DoStuff(e1); // Also works
enclosing::problem x;
x.DoStuff(e2); // This, too.
}
我得到了以下代码:
class enclosing{
protected:
int var1 = 2;
int var2 = 4;
public:
class problem{
friend enclosing;
public:
void DoStuff(enclosing&e1){
int Sum = e1.var1 + e1.var2;
}
}i1;
}e1;
我的问题是,如何访问封闭 class 的受保护成员变量?
这甚至合法吗?
必须通过封闭 class 的对象访问数据成员。例如
void DoStuff( const enclosing &e){
int Sum = e.var1 + e.var2;
}
你的友谊倒退了 - class 不能宣称自己是别人的朋友。
与 Java 的 "inner classes" 不同,class 中定义的 class 不会自动访问 class 的实例定义它 - "inner" class 是完全独立的,您需要将它传递给您希望它使用的实例。
像这样:
class enclosing
{
protected:
int var1 = 2;
int var2 = 4;
public:
friend class problem;
class problem
{
public:
void DoStuff(enclosing& e){
int Sum = e.var1 + e.var2;
}
} i1;
} e1;
int main()
{
e1.i1.DoStuff(e1);
enclosing e2;
e2.i1.DoStuff(e1); // Also works
enclosing::problem x;
x.DoStuff(e2); // This, too.
}