【发布时间】:2011-09-10 15:33:15
【问题描述】:
我有一个由许多子类继承的主类。继承的主类必须至少在继承中受到保护,以防止非派生类通过子类使用或更改它。
有没有办法允许各个子类更改彼此继承的主类变量,但不允许公共访问主类?如果不使用给出的friend关键字,这将产生复杂的代码。
在完整的上下文中:
我有一个节点类,可以添加/删除相对于它的节点。有一个依赖于节点类的列表类(和子类),这意味着节点不能公开访问,以防它也破坏了类列表。节点也必须可以访问以列出帮助程序类。
为了确保发生这种情况,我在另一个类 accessnode 中实现了受保护的节点。所有想要节点权限的类都将 accessnode 继承为受保护的(因此 accessnode 类不是公共的)。这意味着助手和列表类/子类都可以访问节点。
问题是,为了让 TemplateList 以只读方式复制 CharList(TemplateList 的子类),它需要访问 CharList 的节点(以避免使用 CharList 的迭代器) - 问题是,节点是受保护的(以防止外部的、非访问节点的干扰),并实现一个授予节点访问权限的公共方法将失败。
我需要的是侧向继承,所以 accessnode 类型的所有子类都可以访问彼此的节点,而无需公开授予访问权限。
简而言之:
(受保护的)AccessNode 内的节点。
模板列表:受保护的访问节点。
CharList : 受保护的访问节点。
TemplateList 需要访问 CharList 的 AccessNode。
AccessNode/Node 不能公开。
【问题讨论】:
-
你在用这个类层次建模什么?
-
在这里同意赛斯;也许更好地陈述目标,而不是你的第一步。
-
我已经更新了问题。试图澄清。
标签: c++ inheritance subclass