previous next Up Title Contents Index

9.4.4 Perintä

Viimeisenä vaihtoehtona tarkastelemme perintää (inheritance). Valinta koostamisen ja perinnän välillä on vaikea. Aina edes olioasiantuntijat eivät osaa sanoa yleispätevästi kumpiko on parempi. Nyrkkisääntönä voisi pitää seuraavaa is-a - sääntöä:
	Jos voi sanoa että lapsiluokka on (is-a) isäluokka, niin peritään.
	Jos sanotaan että lapsiluokassa on (has-a) isäluokka, niin koostetaan
Kokeillaanpa: "luokka jossa on aika sekunteina" on "aika- luokka". Kuulostaa hyvältä. Siis perimään (taas inline- muoto tilan säästämiseksi):

olioalk\aikacla8.cpp - laajentaminen perimällä

	... kuten aikacla7.cpp
	
	class cAikaSek : public cAika {
	  int s;
	public:
	  void aseta(int ih=0, int im=0, int is=0) {
	    s = is; cAika::aseta(ih,im); lisaa(0);
	  }
	  cAikaSek(int ih=0, int im=0, int is=0) { aseta(ih,im,is); }
	  void lisaa(int lisa_min, int lisa_sek=0) {
	    s += lisa_sek;
	    cAika::lisaa(lisa_min+s/60);
	    s %= 60;
	  }
	  void tulosta(int lf=1) const  {
	    cAika::tulosta(0);
	    cout <<  ":" << setw(2) << s;
	    if ( lf ) cout << endl;
	  }
	};
	
	
	int main(void)
	... kuten aikacla7.cpp
Tässä tapauksessa kirjoittamisen vaiva oli tasan sama kuin koostamisessakin. Joissakin tapauksissa perimällä pääsee todella vähällä. Otamme tästä myöhemmin esimerkkejä, kunhan pääsemme eroon syntaksin esittelystä.

Lapsiluokka, aliluokka (child class, subclass) on se joka perii ja isäluokka, yliluokka (parent class, superclass) se joka peritään. Käytetään myös nimitystä välitön ali/yliluokka, kun on kyseessä perintä suoraan luokalta toiselle, kuten meidän esimerkissämme.

C++:ssa välitön yliluokka ilmoitetaan aliluokan esittelyssä:

	class cAikaSek : public cAika {
Jos täytyy viitata yliluokan metodeihin, joille on kirjoitettu aliluokassa oma määrittely, käytetään näkyvyysoperaattoria :: (scope resolution operator):
	cAika::lisaa(lisa_min+s/60);
Näkyvyysoperaattoria EI käytetä, mikäli samannimistä metodia ei ole aliluokassa.

Perintää kuvataan piirroksessa:


Kuva 9.2 Perintä


previous next Up Title Contents Index