Lopuksi tutkimme miten perittyjä olioita on mahdollista sijoittaa toisilleen. Esimerkkiin lisätään muutamia "seka"-sijoituksia:
cGraafinenOlio *p; cPiste a(7,2),b; cYmpyra y(5,4,12); y.sytyta(); ... b = a; // OK! //a = y; // Ei toimi jollei ole konstruktoria // cPiste(cYmpyra) p = &a; // OK! Tällä voidaan kiertää edell. *p = y; // "a = y". Pisteelle ympyrän // keskipiste ja näkyy (väärin!?). //y = b; // Ei toimi jollei ole konstruktoria // cYmpyra(cPiste); p = &y; // OK! => y = b *p = b; // Sijoistus laillinen koska // caKuvio<cPiste // Sijoitetaan ne pisteen ominaisuud // jotka on graafisessa oliossa, eli // kaikki. p:n osoittama tyyppi ei // muutu, eli säilyy ympyränä. Tosin // "sammuu", mikä ei ole oikein. |
Huomautus: Hierarkiassa "uudempi" voidaan sijoittaa "vanhempaan":
class cA .... class cB : public cA ... ... cA a; cB b; a = b; // OK! Eli aliluokan olio voidaan sijoitta yliluokkaan. Slicing b = a; // Ei sellaisenaan mielekäs, koska osa attribuutteja jää ilman arvoa.