Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

6. cvičení Polymorfismus

Podobné prezentace


Prezentace na téma: "6. cvičení Polymorfismus"— Transkript prezentace:

1 6. cvičení Polymorfismus
Seminář C++ 6. cvičení Polymorfismus Ing. Jan Mikulka

2 Polymorfismus princip přetěžování metod v dědičnosti
jedna metoda je v různých třídách svázaných dědičností implementována rozdílně V odvozených třídách jsou metody předefinovány a pozmění se tak účel metody Metody, které se mají v odvozených třídách změnit se deklarují s klíčovým slovem virtual

3 Příklad použití máme danou třídu Sachy, třída obsahuje metodu algoritmus(), která zajišťuje hru počítače, dále metody pro složité grafické rozhraní chceme vytvořit třídu MojeSachy s naprosto stejným grafickým rozhraním, ale jiným algoritmem myšlení řešení – vytvoření potomka třídy Sachy, MojeSachy a následné přetížení metody algoritmus() výhoda – není nutné zasahovat do původního kódu – jde pouze o přidání v našem kódu

4 Příklad použití class Sachy {
protected: // příklad na oprávnění protected - metoda, kterou může potomek přepsat void algoritmus() { puts("Hloupý algoritmus"); } public: void run() algoritmus(); }; class MojeSachy : public Sachy { // Odvozený šachový program se změnou algoritmu za chytrý protected: // náš chytrý algoritmus puts("Chytrý algoritmus"); void main(void) { MojeSachy sachy; sachy.run(); // nastane problém, metoda run() volá metodu algoritmus() z bázové třídy!!!

5 Virtuální metody Chceme, aby metoda run() bázové třídy Sachy volala metodu algoritmus() podle toho, z jakého objektu ji voláme V případě volání Sachy.run() by měla metoda run() volat Sachy::algoritmus() V případě volání MojeSachy.run() by měla metoda run() volat přetíženou metodu MojeSachy::algoritmus() Minulý příklad toto neřeší! Řešení – virtuální metody

6 Virtuální metody class Sachy { // ... … … virtual void algoritmus() {
puts("Hloupý algoritmus"); } }; class MojeSachy : public Sachy { virtual void algoritmus() { puts("Chytrý algoritmus");

7 Virtuální metody Pokud přidáme k metodě algoritmus() klíčové slovo virtual, překladač při překladu SachyKnihovni::run() ví, že odtud má zavolat virtuální metodu algoritmus(), a nemůže tedy vložit jen jednoduché volání funkce. Místo toho přidá na místo volání jednoduchý kód, který se podívá do tabulky virtuálních metod daného objektu a zavolá příslušnou metodu. O tom, která metoda se zavolá se tedy rozhoduje až za běhu programu.

8 Zadání cvičení Napište třídu Pole, která bude obsahovat jednorozměrné dynamicky alokované pole int, konstruktory a destruktor pro inicializaci pole, metody Print pro výpis pole na konzoli, SortedPrint pro výpis pole seřazeného vzestupně. Tato funkce bude volat protected metodu Sort, která vrátí seřazené pole funkci SortedPrint. Napište třídu PoleEx jako potomka třídy Pole, ve které bude pouze přetížená metoda Sort, která vrátí pole seřazené sestupně. V hlavním programu vytvořte instanci třídy Pole, volejte metodu SortedPrint, která vypíše pole seřazené vzestupně Dále vytvořte instanci třídy PoleEx, volejte metodu SortedPrint, která vypíše pole seřazené sestupně (v případě virtuální metody Sort), resp. vzestupně (bez virtuálních metod) program umístěte do samostatného hlavičkového souboru, nakreslete vývojový diagram použití nového „cout <<“ místo „printf()“ použití new a delete bodování: funkce (1 bod), rychlost (1 bod), stabilita a délka prog. (1 bod), implementace v hl. souboru (1 bod)


Stáhnout ppt "6. cvičení Polymorfismus"

Podobné prezentace


Reklamy Google