Virtuální funkce

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Virtuální funkce (někdy nazývané virtuální metoda) je funkce pracující s instancí třídy, jejíž chování je určeno definicí funkce třídy instance nezávisle na typu ukazatele, který na instanci ukazuje. Virtuální funkce tvoří základ pro polymorfismus (spíš tvoří jeden ze způsobů implementace polymorfismu), což je jeden ze základních znaků objektově orientovaného programování.

V některých programovacích jazycích (například v Javě) jsou metody instancí implicitně virtuální. Nechcete-li, aby byla metoda definována jak virtuální, musíte ji definovaným způsobem označit.

V jiných programovacích jazycích (např. v C++ nebo v C#) naopak funkce implicitně nejsou virtuální a chete-li je definovat jako virtuální, musíte je definovaným způsobem označit.

Metody tříd z prinicipu virtuální být nemohou, leda by třída byla definována jako řádný objekt, jenž je instancí nějaké třídy tříd, jak je tomu např. v jazyku Smalltalk.

Popis

Koncept virtuální funkce řeší následující problém: Mějme třídu B odvozenou od třídy A. Máme-li ukazatel na instanci třídy A, může ukazovat jak na instanci třídy A, tak i na instanci třídy B. +more Ve chvíli překladu programu ale nemusí být jasné (a ani odvoditelné), na instanci které třídy ukazatel ukazuje. Pokud není funkce virtuální, vykoná se funkce třídy A i v tom případě, kdy bude ukazatel ukazovat na instanci třídy B. Virtuální funkce řeší tento problém tím, že se buď 1. podívá na typ objektu (dynamický výběr, dynamic dispatch) nebo 2. vybírá funkci z dat konkrétního objektu (tabulka virtuálních metod), a až poté vybranou funkci spouští. Toto vede k mírnému snížení výkonu aplikace, není proto vždy vhodné použít virtuální funkce.

Příklad

# include //c++ using namespace std;

class Utvar { public: virtual void Kresli { cout Kresli; uKruh->Kresli; uJehlan->Kresli;

delete uUtvar; delete uKruh; delete uJehlan;

return 0; }

Výstup s virtuální metodou Kresli: Kresli utvar... Kresli kruh... Kresli jehlan...

Výstup kdyby metoda Kresli nebyla deklarována jako virtuální: Kresli utvar... Kresli utvar... Kresli utvar...

Kategorie:Objektově orientované programování

Virtuell funktion

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top