Funkcje wirtualne w C++

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

Funkcja wirtualna w C++ to metoda klasy bazowej oznaczona słowem kluczowym virtual. Umożliwia ona wywołanie odpowiedniej wersji metody zależnie od rzeczywistego typu obiektu, a nie tylko od typu wskaźnika lub referencji.

Mechanizm ten jest podstawą polimorfizmu dynamicznego. Programista może operować na obiekcie przez wskaźnik lub referencję do klasy bazowej, a C++ sam wybierze metodę z klasy pochodnej, jeśli została ona nadpisana.

Przykład

#include <iostream>
using namespace std;

class Figura {
public:
    virtual void rysuj() {
        cout << "Rysuję figurę" << endl;
    }
};

class Kolo : public Figura {
public:
    void rysuj() override {
        cout << "Rysuję koło" << endl;
    }
};

int main() {
    Figura* f = new Kolo();
    f->rysuj(); // Rysuję koło
    delete f;
}

Bez virtual zostałaby wywołana metoda z klasy bazowej Figura, ponieważ wskaźnik ma typ Figura*.

Ważne cechy

  • funkcje wirtualne działają głównie przy dziedziczeniu,
  • pozwalają realizować polimorfizm,
  • decyzja o wywołanej metodzie zapada w czasie działania programu,
  • w klasach bazowych często stosuje się też virtual przy destruktorze.

Słowo override

Słowo override nie jest obowiązkowe, ale warto go używać. Informuje kompilator, że metoda ma nadpisywać metodę wirtualną z klasy bazowej. Jeśli programista popełni błąd w nazwie lub parametrach, kompilator zgłosi problem.