【发布时间】:2012-02-17 10:49:04
【问题描述】:
我有以下类结构:
class Common {
//members and data here.
};
class Derived1 : public Common
{
};
class Derived2: public Common, public Derived1
{
};
据我了解,Derived1 和 Derived2 都将共享来自 Common 的任何成员。
有没有办法在Derived2 中将Derived1 设为私有以允许Derived2 仍然从Common 继承但具有单独的函数覆盖。
基本上我需要覆盖Derived1 和Derived2 中的一个虚函数,但仍然运行Derived1 的函数(它是一个线程API)。
任何帮助表示赞赏。
【问题讨论】:
-
如果 Derived1 继承自 Common,而 Derived2 继承自 Derived1,为什么 Derived2 也继承自 Common?这不是多余的吗?
-
说
Common包含虚函数virtual void run()。如果您有一个Common&引用动态类型为Derived2的对象,并且您在该引用上调用run(),您要调用哪个版本的覆盖函数?顺便说一句 -Derived1和Derived2不会共享一个Common对象。为了让他们共享单个Common基础对象,您必须在Derived1和Derived2中虚拟地继承Common。
标签: c++ inheritance overriding multiple-inheritance