【问题标题】:how to enum friend in my class如何枚举我班上的朋友
【发布时间】:2012-08-09 07:28:49
【问题描述】:

我有以下两个类:

class A{
enum ee{a = 1, b = 2 , c = 3};
};

class B{
 /*


 */

};

现在我想在 B 类中使用 enum ee 如何与 A 类中的 enum ee 成为朋友?\

【问题讨论】:

  • 你可以全局声明枚举并在你的类中创建成员
  • 你不需要加好友。枚举可以公开。将其公开,并以enum A::ee aEnum 访问它。个人可以通过A::a 访问
  • @Jeeva 注意全局范围内的枚举(甚至是你的库命名空间)。成员溢出到范围内并倾向于导致意外。
  • 如果eeA 中的public,您可以像这样在B 中拥有一个成员:A::ee enumInB; 并将其设置为enumInB = A::c;

标签: c++ oop enums encapsulation friend


【解决方案1】:

您可以使用这种方法更有选择性地限制访问:

class B;

class A {
    class inner {
        enum ee {a = 1, b = 2 , c = 3};
        friend class B;
    };
public:
    typedef inner exposed;
};

class B {
    void f() {
        const A::exposed::ee e(A::exposed::a);
    }
};

这在其他选项之上引入了限制,在您希望/需要更具体的 wrt 访问时。

具体来说,A 不需要使用这种方法与B 成为朋友,并且A::inner 中的声明按照您指定的方式进行限制。 A::inner 然后可以将其声明保密,并允许通过友谊访问。客户端可以声明一个inner(通过A::exposed 访问),但如果枚举类型和常量是私有的,它对客户端没有实际用途。

【讨论】:

    【解决方案2】:

    如果你把枚举放在A的public部分,你可以把它称为A::ee,取值为A::aA::bA::c.

    class A
    {
    public:
       enum ee {a = 1, b = 2 , c = 3};
    };
    
    class B
    {  
        A::ee an_enum;
        /*    */
    }; 
    

    【讨论】:

      【解决方案3】:

      您不能“加好友”枚举,因为枚举成员在其范围内是公开的。 “交友”涉及公开某事的私人成员。因此,在这种情况下,您需要与class A 成为朋友。

      换句话说:

      class A {
          enum ee {a = 1, b = 2, c = 3};
      
          friend class B;
      };
      

      将使私人enum A::ee 可从class B 访问。

      那么,例如:

      class B {
          void somefunc() {
              enum A::ee v = A::a;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 2016-02-27
        • 2011-03-23
        • 2012-01-27
        • 2015-04-03
        • 1970-01-01
        相关资源
        最近更新 更多