Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Moniperiytyminen

Tyypillisesti luokka periytyy suoraan ainoastaan yhdestä luokasta, mutta joskus luokka kannattaa periyttää useista luokista. Kyseessä on silloin moniperiytyminen.

Esimerkki 1. Moniperiytyminen.

Esimerkiksi, jos ajattelemme pegasusta, lentävää hevosta, joka omaa ominaisuuksia hevosesta ja linnusta. Yksi tapa toteuttaa edellä kuvattu luokka on periyttää sen ominaisuudet kahdesta luokasta: CHevonen ja CLintu.

CHevonen:

Code Block
Wiki Markup
h2. Moniperiytyminen

Tyypillisesti luokka periytyy suoraan ainoastaan yhdestä luokasta, mutta joskus luokka kannattaa periyttää useista luokista. Kyseessä on silloin moniperiytyminen.

h3. Esimerkki 1. Moniperiytyminen.

Esimerkiksi, jos ajattelemme pegasusta, lentävää hevosta, joka omaa ominaisuuksia hevosesta ja linnusta. Yksi tapa toteuttaa edellä kuvattu luokka on periyttää sen ominaisuudet kahdesta luokasta: CHevonen ja CLintu.

CHevonen:
{code}
class CHevonen
{
public:
    void Aantele() {
        printf("Iii-haa-haa!\n");
    }
};
{code}

CLintu:

{
Code Block
}
class CLintu
{
public:
    void Lenna() {
        printf("Lintu lentää\n");
    }
};
{code}

CPegasus:

{
Code Block
}
class CPegasus :
    public CHevonen,
    public CLintu
{
};
{code}

main:

{
Code Block
}
int main()
{
    CPegasus pegasus;

    pegasus.Aantele();
    pegasus.Lenna();
}
{code}

Nyt

...

lentävä

...

hevonen

...

perii

...

sekä

...

hevosen

...

että

...

linnun

...

piirteet.

...

Image Added
Kuva 1.

...

Esimerkin

...

1

...

UML-luokkakaavio.

...


 

Esimerkki 2.

...

Moniperiytymisen

...

ongelma.

...

CHevonen:

{
Code Block
}
class CHevonen
{
public:
    void Syo() {
    }
};
{code}

CLintu:

{
Code Block
}
class CLintu
{
public:
    void Syo() {
    }
};
{code}

CPegasus:

{
Code Block
}
class CPegasus :
    public CHevonen,
    public CLintu
{
};
{code}

main:

{
Code Block
}
int main()
{
    CPegasus pegasus;

    pegasus.Syo();
}
{code}

Yllä

...

olevassa

...

esimerkissä

...

C++-kääntäjä

...

ei

...

tiedä

...

kumpaa

...

Syo()

...

-funktiota

...

tarkoitetaan

...

ja

...

se

...

antaa

...

virheilmoituksen.

...

Image Added
Kuva 2.

...

Esimerkin

...

2

...

UML-luokkakaavio.

...

Ratkaisu:

...

Ongelma

...

voidaan

...

kiertää

...

määrittelemällä

...

kumpaa

...

Syo()

...

-funktioista

...

halutaan

...

käyttää:

{
Code Block
}
int main()
{
    CPegasus pegasus;

    pegasus.CLintu::Syo();
}
{code}

h2. *Moniperintä ohjelmointikielissä*

Kaikki 

Moniperintä ohjelmointikielissä

Kaikki olio-ohjelmointikielet

...

eivät

...

tue

...

moniperintää,

...

kuten

...

esim

...

Java.

...

Moniperintä

...

on

...

kuitenkin

...

tuettu

...

C++-kielessä.