Dans cette forme d'héritage, il n'y a plus d'ambiguïté pour l'accès aux membres issus d'une même classe de base partagée
class base { /*...*/}; class d1: virtual public base{/*...*/}; class d2: virtual public base{/*...*/}; class d: public d1, public d2 {/*...*/};
C'est la classe elle-même qui précise si certaines de ses classes de bases seront partagées ou non par les descendants.
Par ailleurs, on peut à la fois hériter de façon virtuelle et de façon non-virtuelle:
class base { /*...*/}; class d1: virtual public base{/*...*/}; class d2: virtual public base{/*...*/}; class d3: public base{/*...*/} class d: public d1, public d2 , public d3 {/*...*/};