【问题标题】:Access private elements of object of same class访问同一类对象的私有元素
【发布时间】:2011-04-19 10:58:54
【问题描述】:

这合法吗?如果没有,下面的代码是否允许这样做?

class Foo
{
    friend class Foo;
}

【问题讨论】:

    标签: c++ class private private-members


    【解决方案1】:

    如果类是模板,则类与自身交友是有意义的,因为每个具有不同参数的实例化都是不同的类。

    【讨论】:

      【解决方案2】:

      这是多余的和不必要的。此外,我在 g++ 中收到以下警告

      warning: class ‘Foo’ is implicitly friends with itself
      

      【讨论】:

        【解决方案3】:

        是的,Foo 类的对象访问Foo 类的另一个对象的私有成员是合法的。这对于复制构造和赋值之类的事情经常是必需的,并且不需要特殊的朋友声明。

        【讨论】:

          【解决方案4】:

          那是多余的。 Foo 已经可以访问所有 Foo 成员。两个 Foo 对象可以访问彼此的成员。

          class Foo {
          public:
            int touchOtherParts(const Foo &foo) {return foo.privateparts;}
          private:
            int privateparts;
          };
          
          Foo a,b;
          b.touchOtherParts(a);
          

          上面的代码可以正常工作。 B 将访问 a 的私有数据成员。

          【讨论】:

          • @Alex:这是一个古老的 C++ 双关语,C++ 可能是唯一允许朋友触摸自己私密部位的语言 :)
          猜你喜欢
          • 2014-12-06
          • 2013-06-06
          • 1970-01-01
          • 2012-05-11
          • 2017-09-17
          • 1970-01-01
          相关资源
          最近更新 更多