Vysvětlil by mi prosím někdo k čemu jsou vlstně virtuální metody dobré? Resp. je něco, co by bez nich udělat nešlo nebo aspoň jestli to něco zjednodušuje...
Fórum › C / C++
Virtuální Metody
Důležité jistě jsou, využiješ je, když očekáváš odvozování z nějaké třídy...
To Sony:
virtualni metody jsou tu od toho aby bylo pocas behu programu (runtime) jasny ktera funkce se zavola, kdyz je objekt podeden.
konkretni priklad je driver displeje. vzdycky budes volat funkci PutXY(...); zakladniho interface ,no zavola se Ti jenom ta virtualni funkce ktera patri skutecne (dynamicky) skonstruovanemu objektu (napr. driveru displeje).
Hm tomu moc nerozumim. kdy? vytvo?im odvozenej objekt mus? b?t v jeho t??d? ta funkce bu? jak bu? a je jedno jestli je tam "virtual" nebo ne.plat? stejn? v?dy posledn? uveden? funkce dan?ho n?zvu.t? je jasn? ?e se zavol? ta spr?vn? funkce(a? jde o p?ekryt? nebo virtu?ln? metodu).byl by sp?? n?jakej p??klad ve kter?m by to tak nebylo?
p??klad driveru je na m? trochu moc slo?itej tak daleko sem je?t? nedo?el.
Sony píše:#
# Hm tomu moc nerozumim. kdy? vytvo?im odvozenej objekt mus? b?t v jeho t??d? ta funkce bu? jak bu? a je jedno jestli je tam "virtual" nebo ne.plat? stejn? v?dy posledn? uveden? funkce dan?ho n?zvu.t? je jasn? ?e se zavol? ta spr?vn? funkce(a? jde o p?ekryt? nebo virtu?ln? metodu).byl by sp?? n?jakej p??klad ve kter?m by to tak nebylo?#
#p??klad driveru je na m? trochu moc slo?itej tak daleko sem je?t? nedo?el.
Ale jak uz psal soda, tak virtualni metody funguji pouze u objektu, ktere jsou DYNAMICKY vytvorene. Tam prave prekryti metody selhavaji. Ovsem jak je videt z tveho dotazu, tak by nebylo na skodu si zjistit, jak vlastne virtualni metody funguji. Priklad ted nebudu vymyslet, ale zkus navstivit strycka Google a nebo se take podivej na server Builder.cz.
dajme tomu ze mas jednu cisto virtualnu triedu (nejde vytvorit instancia) a od nej si spravis tak 6-7 odvodenych tried ... napr roznych pozicii vo firme.
dalej si nadefinujes pole zamestnancov, ktorym chces napr dat premie (predpokladajme ze kazda pozicia dostava ine premie) tak si nadefinujes metodu VyplatPremiu() a prekryjes ju v kazdej triede. ale kedze su to vsetci zamestnanci jednej firmy tak ich das do pola odkazov na tu bazovu triedu a vyplacas to v cykle for. Tu prichadza bez virtualnych metod problem, pretoze tu metodu si prekryl v kazdej triede, ale bola aj v tej bazovej. kedze si metodu neoznacil ako virtual tak sa budu kazdemu vyplacat rovnake premie ... ak by si ju definoval ako virtualnu tak sa sam program rozhodne ktoru verziu metody VyplatPremiu() ma kedy pouzit podla typu instancie a nie podla typu odkazu. (mno chcel by som vidiet co by ti ti zamestnanci povedali keby dostali napr o 5000Sk menej :D )
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Virtuální metody — založil Kenvelo
Deklarace statické a virtuální pedefinované metody — založil Gooo
Virtuální třída — založil Damian
(virtuální) 3D manipulátor — založil gatuso
Moderátoři diskuze