C++ 关于多态成员的设计决策
我试图设计一些不依赖铸造的东西。我问了一个问题,我相信最终会有更好的办法,所以我在征求意见 我有一个泛型C++ 关于多态成员的设计决策,c++,polymorphism,C++,Polymorphism,我试图设计一些不依赖铸造的东西。我问了一个问题,我相信最终会有更好的办法,所以我在征求意见 我有一个泛型对象,其中会有子类 我有一个通用的节点对象,其中包含一个指向对象的指针作为成员节点s可以子类化,以提供有关如何处理其对象的更具体行为,以及设置特定节点使用的子类对象的类型 问题是,我的基类需要作为成员Object*myObject,以便我的应用程序可以遍历所有节点s,并在所有myObjects上调用draw函数 但是如何处理子类节点在子类对象上调用自定义函数的情况呢?这些函数可能是唯一的,在基
对象
,其中会有子类
我有一个通用的节点
对象,其中包含一个指向对象
的指针作为成员<代码>节点s可以子类化,以提供有关如何处理其对象
的更具体行为,以及设置特定节点使用的子类对象的类型
问题是,我的基类需要作为成员Object*myObject
,以便我的应用程序可以遍历所有节点
s,并在所有myObject
s上调用draw
函数
但是如何处理子类节点在子类对象上调用自定义函数的情况呢?这些函数可能是唯一的,在基类中没有位置
我考虑的一个选项是子类将其指针成员存储为MyObjectSubclass*myObject
,但子类不能重写基类成员,对吗?所以这真的不起作用
对于这种类型的设计,如果您能提供更有经验的建议,我将不胜感激。使用接口。让每个对象子对象从适合该类的接口继承,并为基本对象类提供一个可以检索接口的方法
这就是微软COM的工作方式。@Fellowshee,双重或更多。需要多少接口就有多少。@Fellowshee,事实上,您的基类也可以是接口,例如idravable。为什么认为它比使用
dynamic\u cast
更好?通过让对象提供那个些你们违反的接口,类应该对扩展开放,但对修改关闭,因为若你们添加了更多的子类,你们就必须修改基类。同时,从基类查询子类接口也可能返回nullptr
——与dynamic\u cast
相同,虽然dynamic\u cast
没有违反扩展/修改
principle@Andrew我同意这是一个令人困惑的命题,如果没有具体的例子,我无法完全理解它在本案中的相关性或威力。我怀疑对于我的用例有更好的解决方案。我发现了一个5年前的问题,并且给出了一个相当自信的答案,这表明在这种情况下向下投射是完全可以接受的。这个问题与我上面的问题非常相似: