我有以下两个课程:
class A{
enum ee{a = 1, b = 2 , c = 3};
};
class B{
/*
*/
};
现在我想在 B 类中使用 enum ee 我如何与 A 类中的 enum ee 交朋友?\
我有以下两个课程:
class A{
enum ee{a = 1, b = 2 , c = 3};
};
class B{
/*
*/
};
现在我想在 B 类中使用 enum ee 我如何与 A 类中的 enum ee 交朋友?\
您可以使用这种方法更有选择性地限制访问:
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
),但如果枚举类型和常量是私有的,它对客户端没有实际用途。
如果将枚举放在 的公共部分A
,则可以将其称为A::ee
,并将值称为A::a
、A::b
和A::c.
class A
{
public:
enum ee {a = 1, b = 2 , c = 3};
};
class B
{
A::ee an_enum;
/* */
};
您不能“加好友”枚举,因为枚举成员在其范围内是公开的。“交友”涉及公开某事的私人成员。所以,在这种情况下,你需要成为朋友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;
}
}