Jos luokka periytyy toisesta luokasta, esitellään se muodossa
class jälkeläisluokka : public yliluokka { ... }
// Esim:
class cPiste : public caKuvio { ... }Tässä
public
tarkoittaa, että kaikki yliluokan julkiset ominaisuudet ovat myös
jälkeläisluokan julkisia ominaisuuksia. Perintä voisi olla
myös private,
jolloin ainoastaan jälkeläisluokan julkiset ominaisuudet olisivat
julkisia.
Luokan konstruktori kutsuu lähes poikkeuksetta yliluokan konstruktoria:
cPiste(int ix=0, int iy=0) : caKuvio(ix,iy) { /* mahd. omat toimet */ }Jos
muodostaja olisi muodossa:
cPiste(int ix=0, int iy=0) { siirra(ix,iy); }niin
kutsuttaisiin ensin caKuvio() (oletuskonstruktori, joka löytyy
oletusarvojen ansiosta) ja tämän jälkeen siirrettäisiin
piste (0,0):sta uuteen paikkaan. Tässä voisi jossakin muussa
tapauksessa tulla kohtuuttomasti turhaa työtä. Esimerkinkin
tapauksessa tulisi sijoitukset:
x=0; y=0; nakyy=0; if ( !nakyy ) { x=ix; y=iy; }kun
"oikeassa" tavassa tulee vain sijoitukset:
x=ix; y=iy; nakyy=0;Samalla tavalla ja samasta syystä luokan omat "uudet" attribuutit alustetaan jo ennen varsinaisen konstruktorin suorittamista:
caKuvioJollaSade(int ix=0,int iy=0,int ir=1) :
caKuvio(ix,iy), r(ir) { /* mahd. omat toimet */}Tässä
esimerkissä r on "tavallinen muuttuja", ei olio, joten olisi
yhtä tehokasta kutsua:
caKuvioJollaSade(int ix=0,int iy=0,int ir=1) : caKuvio(ix,iy) { r=ir;}
Kuitenkin jos r olisikin olio, kutsuttaisiin
jälkimmäisessä muodostajassa ensin r:n
oletuskonstruktoria ja sitten vielä pyydettäisiin r:n
sijoitusoperaattoria suorittamaan sijoitus r=ir (joka tehtäisiin
r:n kopiointikonstruktorilla tai r:n sijoitusoperaattorilla).
Merkintä attribuutti(arvo) (esim. r(ir)) tarkoittaa
siis sitä, että kun olio syntyy, niin kutsutaan sen attribuutin
muodostajaa ko. arvolla. Skalaarin tapauksessa tämä muodostaja on
sama kuin sijoitus.