如何制作朋友类的层次结构?

时间:2010-12-19 10:43:32

标签: c++ templates inheritance

我有class A只有私有成员(包含数据,方法,构造函数,析构函数....)。我还class Bclass A的朋友。我希望B的所有派生类(也有继承自B的模板)也是class A的朋友。有没有办法做到这一点?

1 个答案:

答案 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;}
}