C++ ha az ősosztály függvénye virtual, akkor mi a jelentősége annak, ha az utódosztályban kiírom a függvény mellé hogy override? Mire való az override? A példákból nem látom a funkcióját.
Ha virtual egy függvény akkor az bekerül a virtuális metódustáblába minden osztálynak van egy ebből. Egy osztály gyermekosztályainak a v táblája pedig mindig a szülő osztály v táblájának a másolata. Amikor pedig overridols akkor a gyermekosztály v táblájában megváltoztatod az ahhoz a metódushoz tartozó bejegyzést.
Ezért ha overridolsz akkor felül írod ezért fog a leszármazott osztály verziója meghívódni a szülő osztály verziója helyett.
Egy példánynak mindig annak az osztálynak a v táblájára lesz egy hivatkozása amelynek meghívtad a konstruktorát az az amilyen típusú egy objekted konkrétabb formában.
Pl.
Szörny példány = new Óriáspolip();
Itt a példány objektum típusa a szörny ezért a példányod a szörny publikus tagjait fogod tudni elérni pl osztályon kívülről. De neked van egy Szörnytámad metódusod a szörny osztályban de szörnyből több van neked ezért ez így nem jó de ha virtuálisan van definiálva akkor felülírható a polip osztályban és ha így tettél akkor nem a szörny metódusa hívódik meg hanem a polipé mert a példányod a polipod v táblájára hivatkozik.
virtual,
abstract,
override
Ezekkel definiált metódusok min virtuálisak lesznek.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!