Versions Compared

Key

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

...

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

Esimerkki

...

1. Moniperiytyminen.

Code Block

class CHevonen

...


{
public:
    void Aantele()

...

 {
        printf("Iii-haa-haa!\n");

...


    }
};

...



class CLintu

...


{

...


public:

...


    void Lenna()

...

 {
        printf("Lintu lentää\n");

...


    }
};

...



class CPegasus

...

 :
    public CHevonen,
    public CLintu
{
};

int main()
{
    CPegasus pegasus;

    pegasus.Aantele();

...


    pegasus.Lenna();
}

} //Nyt lentävä hevonen perii sekä hevosen että linnun piirteet. Yksi ongelma moniperiytymisessä tulee vastaan, jos molemmilla perittävillä luokilla on samanniminen metodi. Esimerkiksi Syo()-metodi.
 

Esimerkki

...

2. Moniperiytymisen ongelma.

Code Block

class CHevonen

...


{

...


public:

...


    void Syo() {

...


    }
};

...



class CLintu

...


{

...


public:

...


    void Syo()

...

class CPegasus :
    public CHevonen,
    public CLintu
{
};

int main()
{
    CPegasus pegasus;

...

 {
    }
};

class CPegasus :
    public CHevonen,
    public CLintu
{
};

int main()
{
    CPegasus pegasus;

    pegasus.Syo();

...


}

Yllä olevassa esimerkissä C++-kääntäjä ei tiedä kumpaa Syo()-funktiota tarkoitetaan ja se antaa virheilmoituksen.

...