2010-02-23 5 views
14

est-il un moyen de définir une classe Foo en C++ afin queC de l'héritage multiple empêchant diamant

  1. je peux hériter de ce
  2. Je ne peux pas « Hériter de diamant » de celui-ci

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: nice edit, ne s'est pas rendu compte 1. 2. auto itemizes – anon

+0

Vous ne voulez * pas utiliser l'héritage virtuel ou vous ne le savez pas? – Duck

+0

Je n'étais pas au courant. Cependant, j'aimerais aussi avoir une erreur de compilateur. La classe de base "Foo" dont j'hérite est un pointeur invahissant compté. Je ne devrais pas en avoir deux occurrences dans un objet. – anon

Répondre

6

Cprogramming.com Tutoriel: Résoudre le problème de diamant en C++ avec ...

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

Essayez cette

Pour ce type de problème peut être éviter ou résoudre par l'interface.

+0

Incroyable. Je n'ai pas réalisé qu'il y a un héritage "virtuel". – anon

+0

Le problème est que l'héritage 'virtual' est à la portée de ceux qui dérivent, vous ne pouvez pas vraiment faire quelque chose pour changer cela ... alors espérons que ceux qui écrivent des classes dérivées lisent vos commentaires;) –

Questions connexes