你其实是对的,根本不需要A
存在来展示多重继承的问题。
下面的代码(克雷格在评论中雄辩地把它称为“死亡的 V”)就足够了:
#include <iostream>
class xyzzy {
public: virtual int get (void) { return 7; }
};
class plugh {
public: virtual int get (void) { return 42; }
};
class twisty: public xyzzy, public plugh {
};
int main() {
twisty passages;
std::cout << passages.get() << '\n';
return 0;
}
如果你尝试编译它,你会得到:
testprog.cpp: In function ‘int main()’:
testprog.cpp:16:24: error: request for member ‘get’ is ambiguous
testprog.cpp:8:14: error: candidates are: virtual int plugh::get()
testprog.cpp:4:14: error: virtual int xyzzy::get()
但是,请记住,您可以通过以下方式明确选择您想要的:
std::cout << passages.plugh::get() << '\n';
这里有更多关于钻石问题的信息,包括为什么它实际上是一个不同的问题。