Prev Next Up Title Contents Index

Luokan esittely ja konstruktorin "kutsuminen"

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.


Prev Next Up Title Contents Index