Periytyminen
Luokkahierarkiaa suunniteltaessa kannattaa yleiset, usean luokan tarvitsemat toiminnot ja ominaisuudet kerätä omiin luokkiinsa, joista sitten periytetään varsinaiset ohjelmassa käytettävät luokat. Periyttämisestä käytetään myös nimeä erikoistaminen (specialization) ja vastaavasti yhteisten metodien ja muuttujien siirtämistä omaan luokkaansa kutsutaan yleistämiseksi (generalization). Perimimisjärjestyksessä aikaisempaa luokkaa kutsutaan vanhemmaksi (parent) ja siitä perivää luokkaa lapseksi (child).
Periytyminen C++:ssa esitetään seuraavasti:
...
Wiki Markup |
---|
class Perillinen : \[määre\] Vanhempi \{ ... jossa \[määre\] on yleensä public (joskus harvoin protected tai private). |
...
Esimerkki
...
1.
...
Periytyminen.
...
Seuraavassa
...
on
...
esitetty
...
ensin
...
yleinen
...
kantaluokka
...
CElain:
...
Wiki Markup |
---|
class CElain \{ private: // saatavissa vain luokan funktioilla char m_Kutsumanimi\[100\]; int m_Massa; |
...
Wiki Markup |
---|
public: // voidaan käyttää luokan ulkopuolelta
void AsetaNimi(char Nimi\[\]);
char\* KysyNimi(char Nimi\[\]);
void AsetaMassa(int Massa);
int KysyMassa();
};
Seuraavaksi on erikoistettu luokka, joka esittää eläintä kissa, siihen sisällytettään kaikki vain kissalle ominaiset piirteet. |
...
class
...
CKissa
...
:
...
public
...
CElain
...
{
...
private:
...
//
...
saatavissa
...
vain
...
luokan
...
funktioilla
public: // voidaan käyttää luokan ulkopuolelta
void Kehraa();
...
}
...
Luokan
...
CKissa
...
edustaja
...
perii
...
protected
...
ja
...
public-tyyppiset
...
CElain-luokan
...
metodit
...
ja
...
jäsenmuuttujat.
...
Kts.
...
näkyvyys.
...
Huom
...
!
...
public-määre
...
ennen
...
perittävää
...
luokkaa
...
määrittelee
...
perinnän
...
näkyvyyden.
...
Perinnässä
...
voidaan
...
käyttää
...
myös
...
private
...
ja
...
protected
...
-määreitä,
...
mutta
...
niiden
...
käyttö
...
on
...
erittäin
...
harvinaista.
...
Vanhemman
...
funktioiden
...
ylikirjoitus
...
perillisessä
...
Perityn
...
luokan
...
funktoita
...
voidaan
...
ylikirjoittaa
...
perillisessä.
...
Kutsuttaessa
...
funktoita
...
perillisen
...
olion
...
kautta
...
suoritetaan
...
perillisessä
...
ylikirjoitettu
...
funktio.
...
Esimerkki
...
2.
...
Funktion
...
ylikirjoitus
...
perillisessä.
...
#include
...
<iostream>
...
using
...
namespace
...
std;
...
class
...
CElain
...
{
...
public:
...
//
...
voidaan
...
käyttää
...
luokan
...
ulkopuolelta
void TulostaLuokanNimi()
...
{ cout << "Luokan nimi on CElain."
...
<<
...
endl;
...
}
};
class CLehma : public CElain
{
public:
void TulostaLuokanNimi()
{ cout << "Luokan nimi on CLehma." << endl; }
};
int main()
{
CLehma lehma;
lehma.TulostaLuokanNimi();
CElain elain;
elain.TulostaLuokanNimi();
...
}
...
Testatkaa
...
mitä
...
main():ssa
...
tehdyt
...
funktiokutsut
...
tulostavat
...
.