If virtual base classes are used, functions, objects, types, and enumerators can be reached through multiple-inheritance paths. Because there is only one instance of the base class, there is no ambiguity when accessing these names.
Figure 9.10 shows how objects are composed using virtual and nonvirtual inheritance.
Figure 9.10 Virtual vs. Nonvirtual Derivation
In Figure 9.10, accessing any member of class A
through nonvirtual base classes causes an ambiguity; the compiler has no information that explains whether to use the subobject associated with B
or the subobject associated with C
. However, when A
is specified as a virtual base class, there is no question which subobject is being accessed.