C++ mire jók a virtuális függvények?
Itt egész jól megfogalmazzák:
Kb. úgy működik, hogy amikor egy A osztályból származtatsz egy B osztályt, és az A egyik metódusát a B felülírja a sajátjával, akkor a alap esetben a B-ből létrehozott objektumra mutató pointer (amivel meghívjuk) típusa határozza meg, hogy az ős vagy a leszármazott metódus hívódik-e meg. Más szavakkal: a fordító, amikor bedrótozza a hívást a megfelelő metódushoz, akkor csak azt nézi, hogy épp milyen típusra mutatunk.
Ha egy A típusú pointerrel mutatunk egy B objektumra, akkor ilyenkor a fordító csak azt látja, hogy A típusú a pointer, tehát az A metódusát hívja meg. Ez nem mindig jó, pl. ha ős osztályú objektumokat tud tárolni egy általános konténer.
Ha az ős metódus virtuális, akkor a hívás nem a mutatott típus szerinti osztályra mutat, hanem először a virtuális metódus táblára (VMT), és onnan veszi azt az osztály (ill. metódust), amilyen a mutatott objektum valójában.
Tehát ha egy A típusú pointerrel mutatunk egy B objektumra, akkor is a megfelelő, B osztályhoz tartozó metódus fog meghívódni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!