2010-02-23 20 views
14

Czy istnieje sposób, aby zdefiniować klasę Foo w C++ tak żeC++ dziedziczenie wielokrotne zapobiegania diament

  1. mogę dziedziczyć z niej
  2. nie mogę „diament dziedziczą” z niego

Tzn.

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: dobra edycja, nie zdałem sobie sprawy 1. 2. auto itemizes – anon

+0

Nie * chcesz używać wirtualnego dziedziczenia lub nie jesteś tego świadomy? – Duck

+0

Nie wiedziałem o tym. Jednak chciałbym również uzyskać błąd kompilatora. Podstawowa klasa "Foo", z której dziedziczę, jest inwazyjnym wskaźnikiem ref-counted. Nie powinienem mieć dwóch instancji w obiekcie. – anon

Odpowiedz

6

Cprogramming.com Tutorial: Rozwiązywanie Diamond problem w C++ z ...

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

Try To

dla tego typu problemów można uniknąć lub rozwiązać poprzez interfejs.

+0

Niesamowite. Nie zdawałem sobie sprawy, że istnieje "wirtualne" dziedzictwo. – anon

+0

Problem polega na tym, że dziedziczenie "wirtualne" jest na wyciągnięcie ręki tych, którzy czerpią, naprawdę nie można zrobić nic, aby to zmienić ... więc miejcie nadzieję, że ci, którzy piszą klasy pochodne czytają wasze komentarze;) –