C++/Funkcje wirtualne: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Nie podano opisu zmian
Linia 7:
 
Mając klasę bazową wyprowadzamy od niej klasę pochodną:
<presource classlang="lang-cpp">
 
class Baza
Linia 27:
};
 
</presource>
Jeżeli teraz w funkcji main stworzymy wskaźnik do obiektu typu Baza, to możemy ten wskaźnik ustawiać na dowolne obiekty tego typu.
Można też ustawić go na obiekt typu pochodnego, czyli Baza2:
<pre class="lang-cpp">
 
<source lang="cpp">
void main()
{
Linia 49:
}
 
</presource>
Po skompilowaniu na ekranie zobaczymy dwa wypisy: "Tu funkcja pisz z klasy Baza".
Stało się tak dlatego, że wskaźnik jest do typu Baza. Gdy ustawiliśmy wskaźnik na objekt typu pochodnego (wolno nam), a nastepnie wywołaliśmy funkcję składową, to kompilator "na ślepo" sięgnął po funkcję pisz z klasy bazowej (bo wskaźnik wskazuje na klasę bazową).
Linia 55:
Można jednak określić żeby kompilator nie sięgał po funkcję z klasy bazowej, ale sam się zorientował na co wskaźnik pokazuje. Do tego służy przydomek ''virtual'', a funkcja składowa nim oznaczona nazywa się wirtualną.
Różnica polega tylko na dodaniu słowa kluczowego ''virtual'', co wygląda tak:
<pre class="lang-cpp">
 
<source lang="cpp">
class Baza
{
Linia 75:
};
 
</presource>
 
== Konsekwencje ==