【问题标题】:Access Protected Members of a enclosing class [Nested Classes]访问封闭类的受保护成员 [嵌套类]
【发布时间】:2015-07-16 15:51:47
【问题描述】:

我得到以下代码:

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;

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

【问题讨论】:

  • 不,不是。你需要为内部类提供一个封闭类的实例来处理。
  • 所以我应该添加一个“朋友”?
  • 也许,您想将e1 传递给problem::DoStuff?
  • 也许吧。但是我该怎么做呢?

标签: c++ class nested protected


【解决方案1】:

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

与 Java 的“内部类”不同,在类中定义的类不会自动访问定义它的类的实例——“内部”类是完全独立的,您需要将您的实例传递给它希望它与它一起工作。

像这样:

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.
}

【讨论】:

  • 感谢您的详细解释
【解决方案2】:

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

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

【讨论】:

  • 谢谢你,你让我开心。找了一个小时终于找到了一个不错的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
相关资源
最近更新 更多