Virtuaalimetodi

Wikipediasta
Siirry navigaatioon Siirry hakuun

Virtuaalimetodi tai virtuaalifunktio (engl. virtual method, engl. virtual function) on olio-ohjelmointikielien ominaisuus, jolla perintää käyttävä olio voi korvata yliluokassa olevan metodin toteutuksen toisella. Virtuaalimetodeja tukevia kieliä ovat esimerkiksi C++ ja Object Pascal.[1]

Virtuaaliosoitin (engl. virtual pointer) on funktio-osoittimen tapaus, jolla virtuaalimetodeihin viitataan. Virtuaaliosoittimet sijoitetaan ajonaikaisesti virtuaalimetoditaulukkoon (engl. virtual method table, engl. virtual call table).

Mikäli perityssä luokassa ei ole toteutusta virtuaalimetodille kutsut tehdään kantaluokan toteutukseen. Abstrakti pure virtual metodi, jolla ei ole toteutusta kantaluokassa on pakko toteuttaa perityssä luokassa.

class Geometria
{
    virtual float pinta_ala() = 0; // pure virtual
    virtual int verteksilukum() { return 0; } // oletustoteutus
};

class Kolmio : public Geometria
{
    virtual float pinta_ala(); // määrittely
};

float Kolmio::pinta_ala() // toteutus
{
     return 42.0;
}

// kutsut virtuaalikutsujen kautta
Geometria *p = new Kolmio(); // käytetään kantaluokan osoitinta, ei tarvitse tietää varsinaista tyyppiä
float a = p->pinta_ala(); // perityn luokan toteutus
int l = p->verteksilukum();  // kantaluokan toteutus

Katso myös[muokkaa | muokkaa wikitekstiä]

Lähteet[muokkaa | muokkaa wikitekstiä]

  • Stroustrup, Bjarne: The C++ Programming Language, 4th ed.. Addison-Wesley, 2015. ISBN 0-321-56384-0.

Viitteet[muokkaa | muokkaa wikitekstiä]

  1. Virtual methods freepascal.org. Viitattu 26.3.2018.