4

我有以下两个课程:

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

class B{
 /*


 */

};

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

4

3 回答 3

3

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

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),但如果枚举类型和常量是私有的,它对客户端没有实际用途。

于 2012-08-09T07:43:52.947 回答
1

如果将枚举放在 的公共部分A,则可以将其称为A::ee,并将值称为A::aA::bA::c.

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

class B
{  
    A::ee an_enum;
    /*    */
}; 
于 2012-08-09T07:33:04.830 回答
1

您不能“加好友”枚举,因为枚举成员在其范围内是公开的。“交友”涉及公开某事的私人成员。所以,在这种情况下,你需要成为朋友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;
    }
}
于 2012-08-09T07:33:53.953 回答