我有class A
只有私有成员(包含数据,方法,构造函数,析构函数....)。我还class B
是class A
的朋友。我希望B的所有派生类(也有继承自B的模板)也是class A
的朋友。有没有办法做到这一点?
答案 0 :(得分:1)
C ++并不直接支持这一点:"a kid of my friend is not my friend"。
您必须使用其他方式来实现此目的;例如,在class B
中定义一组受保护的访问器函数:
class A {friend class B; int x, y};
class B
{
protected:
int& AccessX(A& a) {return a.x;}
int& AccessY(A& a) {return a.y;}
}
仅当class A
非常小时才可行。
如果class A
很大,您必须考虑您希望class B
及其派生类与class A
完全相同,并将其表达为一组函数。在class B
:
class A
{
A(): x(42), y(99) {}
friend class B;
int x, y;
}
class B
{
protected:
A Create() {return A();}
void Manage(A& object) {object.x += 1; object.y += 2;}
}