【发布时间】:2012-07-06 17:23:07
【问题描述】:
假设我有 4 节课:
class I { public: virtual void X() = 0; };
class A : public virtual I { public: virtual void X() { } };
class B : public I { };
class C : public A, public B { };
I、B 和 C 是抽象的,而 A 不是。如果我只是简单地将virtual 添加到I 的继承中以获得B,那么A::X() 在C 中解析I::X()。
但是,我无法更改B 的来源。
我的问题:我能否让A::X() 为C 解析I::X 而不能更改B?我尝试将 A 和 B 声明为虚拟到 C 无济于事。我试图没有多余的代码(例如让 C 声明 X() { A::X(); })。有什么巧妙的技巧吗?
另外 - 有几个问题非常像这样,但我找不到任何关于使用 virtual 继承的讨论。如果我错过了,请指点给我。
【问题讨论】: