个人建议,仅供参考。 [解决办法] 这是有名的钻石问题:(多重继承) CChild / \ CRoot CWebChild \ / CWebRoot 解决方法: 1、让CRoot,CWebChild虚拟继承自CChild class CRoot : virtual public CChild class CWebChild : virtual public CChld 2、CWebRoot多重继承CRoot, CWebChild class CWebRoot : public CRoot, public CWebChild
这是有名的钻石问题:(多重继承) CChild / \ CRoot CWebChild \ / CWebRoot 解决方法: 1、让CRoot,CWebChild虚拟继承自CChild class CRoot : virtual public CChild class CWebChild : virtual public CChld 2、CWebRoot多重继承CRoot, CWebChild class CWebRoot : public CRoot, public CWebChild
++ [解决办法]
类似于目录树的结构,现在有根类对象CRoot,子目录对象CChild, CRoot派生于CChild,CChild和CRoot都会派生出不同的Root类和Child类, 但是派生出来的Root类想用派生出来的Child类为子类,但这样原来的CRoot类的一些方法和变量就无法继承了。应该如何设计呢? 当前为如下结构 CChild CRoot :public CChild CWebChild :public CChild CWebRoot: public CRoot (这样的话,无法继承CWebChild的属性) 如果是CWebRoot: public CWebChild 又无法继承CRoot的属性 有什么好的设计思路吗?
可以这样吗? CWebRoot:public CRoot, public CWebChild 同时继承两个类 [解决办法]
类似于目录树的结构,现在有根类对象CRoot,子目录对象CChild, CRoot派生于CChild,CChild和CRoot都会派生出不同的Root类和Child类, 但是派生出来的Root类想用派生出来的Child类为子类,但这样原来的CRoot类的一些方法和变量就无法继承了。应该如何设计呢? 当前为如下结构 CChild CRoot :public CChild CWebChild :public CChild CWebRoot: public CRoot (这样的话,无法继承CWebChild的属性) 如果是CWebRoot: public CWebChild 又无法继承CRoot的属性 有什么好的设计思路吗?
可以这样吗? CWebRoot:public CRoot, public CWebChild 同时继承两个类
3、 如果lz确实在根节点和子节点上,有不同的逻辑需求, 可以先设计一个节点父类叫TreeNode实现所有节点共同的属性, 然后设计一个业务逻辑类的父类Action,不同子节点的不同需求分别继承这个Action,得到一系列的XXXAction。 最后RootNode : public TreeNode, public XXXAction, public XXXAction ChildNode : public TreeNode, public XXXAction, public XXXAction, public XXXAction [解决办法] 这个没这么复杂吧 先分层次 再定结构 1.有个NODE类 这是一个基类 成员有parent(NODE类型),child(NODE类型) 2.NODE类作为基类提供接口最大化,需要用到的就重载. 3.尽量不要用到多重继承,从C++对象模型来说效率低 容易产生歧义 后面维护和扩展比较麻烦。