在一个项目中,我有一个类层次结构来实现一个具有层次结构级别的图(也就是说,一个图节点可以是一个图本身 - 将其视为一个电子电路,其中一个门实际上可以是一个集成芯片,例如)。因此,我有一些Base
派生到Group
andLeaf
的类,并且该类Base
有一个属性ancestor
,我希望能够从Group
(添加子项时)的给定方法设置它,但不能从其他任何地方设置:
class Group;
class Base {
private: // or protected?
Group* ancestor;
};
class Group : public Base {
private:
void setAncestor(Base* child) {
// Something like
child->ancestor = this;
}
};
class Leaf : public Base {
// ...
};
实现这一目标的“正确”方法是什么?通常,我会使用friend
方法,但在我看来,这在这种情况下是不可能的,因为我必须在 中声明朋友Group::setAncestor
,Base
这必须在之前声明。(另请注意,这些声明位于实际代码中的不同文件中。)