【发布时间】:2012-05-21 02:54:13
【问题描述】:
如果一个父类是一个接口(只包含带有虚拟析构函数的纯虚函数),是否可以使用多重继承?
我想只暴露接口部分(图中黄色类)以提高编译速度。绿色部分是执行部分。但是CPet应该继承自CAnimal(is-a relationship)和IPet(implement),还有“死亡之钻”:(
接口类(黄色部分)只有纯虚函数和虚析构,所以我通过工厂类创建CDog、CCat时,没有歧义之类的问题。 CDog 有两个 vtable(来自 IDog 和 CPet),但在虚函数表中,点表示相同的函数(CDog 成员函数)。
没有编译错误,没有运行错误……但我担心这个层次结构。 没问题还是有什么问题?
PS:我不想使用“虚拟继承”,因为如果我使用它,我无法通过观察视图查看类成员变量。(我猜这是因为虚拟继承链接到父类,如链接 -列表。)
环境:Visual Studio C++ 2008 或以上。
【问题讨论】:
-
“我不想使用'虚拟继承',因为如果我使用它,我无法通过监视视图查看类成员变量。”假设这是真的(我还没有验证过),也许你应该使用更好的调试器。您不应该仅仅因为调试环境的属性而避免使用语言功能。这就像不使用
std::vector只是因为它使查看数组变得更加困难。 -
只有
Pets可以Eat?可怜的饥饿的野生动物:-( -
"我无法通过观察视图查看类成员变量。" — 我可以(VC++2010X)。
-
"我想只暴露接口部分(图中黄色类)以提高编译速度。"你不使用预编译的头文件吗?
-
我应该尝试在 VS2010 上进行测试......和其他建议......谢谢。
标签: c++ inheritance multiple-inheritance virtual-functions