Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

...

.