Nyt erityinen ongelma on kaksi erillistä nakyy- attribuuttia. Samoin kaksi erillistä keskipistettä. Jos haluamme, että kummallakin on sama keskipiste ja näkyvyys sekä säde, täytyy cSateellinenOlio periä ympyrään ja neliöön virtuaalisena (inherited base as virtual):
/* MULTI5.CPP */ ... class cYmpyra : virtual public caKuvioJollaSade {... class cNelio : virtual public caKuvioJollaSade {...Nyt ympyräneliölle tulee vain yksi yhteinen keskipiste, säde ja näkyvyys. Ongelmaksi tulee kuitenkin se, että pisteelle kutsutaan nyt oletusmuodostajaa caKuvioJollaSade(), koska kutsu tehdään vain kerran. Siis jos ympyräneliölle halutaan alustaa keskipiste, on vielä ympyräneliön muodostajaa ja hajottajaa muokattava:
class cYmpyranelio: public cYmpyra, public cNelio { public: cYmpyranelio(int ix=0, int iy=0, int ir = 1, int is = 2) : caKuvioJollaSade(ix,iy,ir), cYmpyra(ix,iy,ir), cNelio(ix,iy,is) { } void piirra() const { cYmpyra::piirra(); cNelio::piirra(); } ~cYmpyranelio() { sammuta(); } };Ilman virtual-määritystä muodostajien ja hajottajien kutsut olisivat (ku = kuvio, ks = kuvio jolla säde):
muodostajat: ku ks ympyra ku ks nelio ympyranelio hajottajat: ympyranelio nelio ks ku ympyra ks kuVirtual-määrityksen kanssa kutsut ovat vastaavasti:
muodostajat: ku ks ympyra nelio ympyranelio hajottajat: ympyranelio nelio ympyra ks kuEdellä saatiin virtuaalisella perinnällä toimiva rakenne, mutta entäpä jos halutaisiinkin oma säde sekä neliölle että ympyrälle?