Šesté cvičení – virtuální metody
Při práci s objekty v C++ se často setkáme s pojmy virtuální metody, časná a pozdní vazba či zastínění metody. Na této hodině jsme si osvětlili všechny tyto termíny.
Obsah cvičení
Od minulého cvičení bylo nutné dobrat některé další techniky v objektovém programování. Zmínili jsme virtuální dědičnost, nebo-li rozdíl mezi časnou a pozdní vazbou, i zastiňování metod u potomků. Ukázali jsme si vlastnost „Potomek může zastoupit předka”. Podrobně jsme vysvětlili konverzní operátory, které nově přibyly v C++.
Ve zdrojovém kódu odkázaném níže je řada chyb. Vaším úkolem bude opravit chyby v kódu tak, aby šel program přeložit, aby vypsal přesně níže uvedený výstup a aby program Valgrind nehlásil žádný únik paměti. Chyby v programu jsou několika druhů, jejich oprava nevyžaduje větší zásahy do kódu (budete vepisovat pouze jednotlivé řádky nebo dokonce jen pár znaků). Sepište seznam všech chyb a nakreslete si graf dědičnosti tříd. Nesmíte měnit obsah funkce
Chybný zdrojový kód, který je nutné opravit
main()
!!Výstup programu má být při neexistenci chyb následující:
kreslim nuhelnik s 4 vrcholy na platno 3
kreslim bod [-2, -1] na platno 3
kreslim bod [2, -1] na platno 3
kreslim bod [2, 1] na platno 3
kreslim bod [-2, 1] na platno 3
kreslim caru z [-2, 2] do [5, 12] na platno 3
kreslim bod [-1, 1] na platno 3
kreslim nuhelnik s 3 vrcholy na platno 3
kreslim bod [-1, 0] na platno 3
kreslim bod [1, 0] na platno 3
kreslim bod [0, 0] na platno 3
kreslim nuhelnik s 5 vrcholy na platno 3
kreslim bod [-1, -1] na platno 3
kreslim bod [1, -1] na platno 3
kreslim bod [1, 1] na platno 3
kreslim bod [0, 2] na platno 3
kreslim bod [-1, 1] na platno 3
kreslim nuhelnik s 5 vrcholy na platno 3
kreslim bod [-1, -1] na platno 3
kreslim bod [1, -1] na platno 3
kreslim bod [1, 1] na platno 3
kreslim bod [0, 2] na platno 3
kreslim bod [-1, 1] na platno 3
Program Valgrind musí hlásit, že nedošlo k úniku paměti.
==3655== All heap blocks were freed -- no leaks are possible