Re: virtual inheritance
On 13 avr, 15:11, Rahul <sam_...@yahoo.co.in> wrote:
I have the following class hierarchy,
A
B C
D
B and C are derived from A and D is derived from B and C. Now in
order to avoid the duplication problem, virtual inheritance can be
used. But i'm not sure as to where it should be used?
Should B and C inherit A virtually or should D inherit virtually B
and C?
B and C should inherit virtually from A.
I'm confused as i'm dealing with a case where A, B and C are provided
by different vendors. B knows that it has to inherit from A but is not
aware about anything else, so is the case with C.
So they should inherit virtually, unless they need a private
copy of A, which isn't shared. In general, unless you know the
full hierarchy, virtual inheritance should be the default.
Now how does the vendor providing class D solve the
duplication problem?
By getting the vendors of B and C to do things correctly.
Seriously, it can be a problem, because this issue seems to be
frequently ignored. (Logically, one wishes that virtual
inheritance had been the default.)
The first thing you might ask is: does it matter? If A has no
data members (which is most often the case when classes are
inheriting from it), it might not matter. You end up with two A
objects (and two A* for each D object), but it typically doesn't
matter which one gets used.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34