2010-02-23 63 views
14

有没有办法++定义一个类Foo用C 使C++多重继承防止钻石

  1. 我可以从它
  2. 我不能“钻石继承”从它
继承

Ie

class Cat: public Foo{} // okay 
class Dog: public Foo{} // okay 
class Weird: public Cat, public Dog {} // I want this to throw a compiler error 
+0

@vava:很好的编辑,没有意识到1. 2. auto itemizes – anon 2010-02-23 05:12:54

+0

你*不想*使用虚拟继承或者你不知道它? – Duck 2010-02-23 05:16:23

+0

我不知道。但是,我也想得到一个编译器错误。我继承的基类“Foo”是一个入侵式的ref计数指针。我不应该在对象中有两个实例。 – anon 2010-02-23 05:19:43

回答

6

Cprogramming.com教程:解决问题的钻石在C++与...

http://www.cprogramming.com/tutorial/virtual_inheritance.html

尝试这个

对于这类问题可以避免或解决的接口。

+0

令人惊叹。我没有意识到这是“虚拟”继承。 – anon 2010-02-23 05:18:57

+0

问题在于虚拟继承是派生出来的人的手,你不能真的做任何改变......所以只希望那些编写派生类的人阅读你的意见;) – 2010-02-23 16:33:09