访问封闭类的受保护成员[嵌套类]

时间:2015-05-06 13:16:30

标签: c++ class nested protected

我收到了以下代码:

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;

我的问题是,如何访问封闭类的受保护成员变量? 这甚至是合法的吗?

2 个答案:

答案 0 :(得分:1)

你的友谊倒退了 - 一个班级不能宣称自己是别人的朋友。

与Java"内部类"不同,类中定义的类不会自动访问定义它的类的实例 - " 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.
}

答案 1 :(得分:0)

必须通过封闭类的对象访问数据成员。例如

void DoStuff( const enclosing &e){
            int Sum = e.var1 + e.var2;
        }