Obsah // O pastech a propastech...11 // 1. Zahřívací kolo...15 // 1.1 Příkazy...15 // Příkaz switch...I5 // Zatoulané else...16 // 1.2 Operátory...17 // Rovnost není přiřazení...17 // && není s, I I není |... // Ne každý operátor má takovou prioritu, jakou bychom právě potřebovali // Matematická zkratka v Céčku?...20 // Není dělení jako dělení...20 // Asociativita operátorů...21 // Pořadí, ve kterém se vyhodnocují operandy...21 // Co se změní dříve?...22 // 1.3 Důsledky lexikální konvence...23 // 1.4 Syntax...24 // Jen středník...24 // 1.5 Funkce...26 // Volání funkce...26 // Prototyp? ? čemu to?...27 // 1.6 Sestavování a proměnné...27 // Různé tváře jedné proměnné...28 // Dvě proměnné se stejným jménem...29 // 1.7 Registrové pseudoproměnné...29 // 2. Makra...31 // 2.1 Jedna závorka, žádná závorka...31 // 2.2 Jednou stačí...32 // 2.3 Makra mohou být zatraceně dlouhá...32 // 2.4 Může makro nahradit deklaraci typu?...33 // 2.5 Středník v makru...33 // 2.6 Makro jako příkaz: assert...34 // 2.7 Aha, mezera...38 // 2.8 Preprocesor pracuje s položkami...39 // 2.9 Nedělejme z Céčka Pascal...39 // 3. Pole a ukazatele...41 // 3.1 Pole nejsou ukazatele a ukazatele nejsou pole...41 // Ukazatele...41 // Pole...41 // Pole podrobněji...42 // Jednorozměrná pole...42 // 40 00 // Vícerozměrná pole... // Ukazatel na ukazatel... // Co je špatně v úvodním příkladu... // Jak to mělo být správně...
// Jednou ukazatel, podruhé pole... // U funkcí je to jedno... // 3.2 Pole...’...’... // Počítáme prvky pole... // Ukazatel na prvek za posledním... // 3.3 Ukazatele... // Toulavé ukazatele... // Ukazatel na objekt, který již neexistuje // .43 .44 .45 // ...46 // ...46 // ..47 ..47 ..47 ..48 ..48 ..48 ..49 // 4. Funkce v C++ // 53 // 4.1 Předávání parametrů odkazem... // Předávání ukazatelů... // Pozor na pole... // Předávání odkazem v C++... // Kdy je předávání odkazem nezbytné Konstantní reference... // ...53 // ...53 // ...53 // ...54 // ...56 // ...57 // 4.2 Výsledek... // Ukazatel na neexistující objekt... // Vracíme výsledek odkazem... // Odkaz na neexistující objekt... // Dereferencovaný ukazatel... // 4.3 Standardní konverze... // 4.4 Výpustka... // 4.5 Funkce podle Kerninghana a Ritchieho... // 4.6 Pryč s konstantou null... // 4.7 Kterou funkci vlastně voláme?... // Rozlišování přetížených funkcí... // Standardní konverze nemusejí být přenositelné.. // ...58 // ...58 // ...58 // ...60 // ...60 // ...61 // ...62 // ...63 // ...63 // ...64 // ...65 // ...69 // 5. Vstupy a výstupy... // 5.1 Nejběžnější chyby na úvod... // 5.2 Čtení souboru... // Binární soubor... // Textový soubor... // Čtení řetězců... // Znaky a jiná data... // getcharO vrací int... // 5.3 Aktualizace souboru... // 5.4 Vlastní výstupní operátor... // Šířka pole... // Definice vstupních a výstupních operátorů // 5.5 Paměťové
proudy... // 5.6 Proč nepíše?... // 5.7 Textové a binární soubory... // .70 // .70 // .72 // ..72 // .72 // .74 // .75 // .76 // .78 // .80 // .80 // .81 // .82 // .83 // .84 // Binární soubor...84 // Textový soubor...84 // Otevřeni souboru...85 // Otevření souboru v nesprávném režimu...86 // Formátovaný výstup v binárním režimu...87 // Neformátovaný vstup a výstup v textovém režimu...87 // 5.8 Konzola...88 // Je konzola textový soubor?...88 // 6. Trocha počítání...90 // 6.1 Problémy s celými čísly...90 // Celočíselné dělení...90 // Celočíselné přetečení...91 // Celočíselné konverze...95 // Platí asociativní zákon?...96 // 6.2 Problémy s reálnými čísly...97 // Porovnávání reálných čísel...98 // Sčítání reálných čísel...98 // Knihovní funkce...100 // Není arkustangens jako arkustangens...101 // 7. Zapouzdření, metody...104 // 7.1 Zapouzdření má být vodotěsné...104 // Dočasné proměnné... 106 // 7.2 Volání metod...107 // Třída je oblast viditelnosti...107 // Dominance...108 // 7.3 Metody, které volá překladač automaticky...109 // Další automaticky volané metody...111 // 7.4 Konstantní objekty...112 // Metody konstantních objektů...112 // Dvě verze jedné metody...113 // Když konstanty nejsou konstantní...114 // Měnitelné složky konstant...114 // 8. Dědičnost...116 // 8.1 Přetypování mezi předkem a potomkem...116 // 8.2 Adresa objektu...117 // 8.3 Přetypování v novém
stylu...120 // Operátor dynamic_cast...I21 // 9. Konstruktory a destruktory...128 // 9.1 Inicializace předků a atributů...128 // Konstruktor by měl inicializovat všechny složky instance... 128 // Inicializační část konstruktoru...129 // Konstruktory virtuálních předků... 130 // Inicializace nepřímého virtuálního předka...131 // Explicitní volání jiného konstruktoru... 133 // 9.2 Konstruktor volá konstruktory předků a destruktor volá destruktory předků...135 // 9.3 Kopírovací konstruktory...136 // Parametry kopírovacího konstruktoru...136 // Když nestačí implicitní kopírovací konstruktor...137 // Přiřazovací operátor nenahradí kopírovací konstruktor...139 // 9.4 Implicitní voláni konstruktoru...139 // Explicitní konstruktory...141 // Staräí překladače...142 // 10. Virtuální metody...144 // 10.1 Kdy použít virtuální metody...144 // Rozhraní musí být stejné...146 // 10.2 Implicitní hodnoty parametrů...146 // 10.3 Virtuální metody a vícenásobná dědičnost...147 // 10.4 Virtuální destruktor...149 // 10.5 Konstruktory, destruktory a virtuální metody...151 // 10.6 Zbytečné virtuální metody...153 // 10.7 Deklarace patří do hlavičkových souborů...153 // 10.8 Čistě virtuální destruktor...155 // 10.9 Jak se vyhnout pozdní vazbě...155 // 10.10 Shrnutí...156 // 11. Správa paměti...157 // 11.1 Operátory new a delete...157 // Operátor new vrací ukazatel správného typu...157 // Operátor new nemusí
uspět... I57 // Napíšeme-li new, musíme napsat i delete...158 // delete musí mít své new...158 // Zapomeňme namalloc ( ) a free O...159 // Nekonečný cyklus v new...159 // Operátor delete [ ]...160 // 11.2 Vývoj operátoru new...161 // 12. Přetěžování operátorů...163 // 12.1 Pravidla slušného chování...163 // Aritmetické operátory a %...163 // Přiřazovací operátor =...163 // Globální operátor new...164 // Operátory &&, M a , ...165 // Jen konvence, nic víc...165 // 12.2 Zřetězené operátory...165 // 12.3 Kdy nevracet výsledek odkazem...167 // 12.4 Přiřazovací operátor =...170 // Když nestačí implicitní přiřazovací operátor...170 // Přiřazovací operátor se nedčdí...171 // Přiřazovací operátor nemůže zastoupit kopírovací konstruktor...171 // Shodné objekty a přiřazování...172 // Paměť jen tak okopírovaná...174 // Když nedodržíme pravidla slušného chování...176 // 12.5 Složené přiřazovací operátory...176 // 12.6 Operátory new a delete...178 // Operátory new a delete lze předefinovat...178 // new má mít své delete...180 // Operátor new a pole...181 // Co vrací přetížený operátor new [ ] ?...182 // 12.7 Operátor ->...183 // 12.8 Operátory I I, && a ...183 // 12.9 Operátory ++a —...184 // 13. Výjimky...188 // 13.1 Výjimku je třeba zachytit...188 // Výjimky a dědičnost...188 // Žádné jiné konverze...I89 // Černá díra na výjimky...190 // Výjimky chytáme odkazem...19I
// Jednosměrná ulice...192 // 13.2 Zdánlivé bezpečí...195 // Únik prostředků při výjimce...195 // Výjimky v destruktoru...199 // Výjimky v konstruktoru...201 // 13.3 Závazky je třeba dodržovat...205 // Specifikace výjimek a šablony...206 // Funkce volaná z unexpected ( )...207 // 13.4 Borland C++: podrobnější informace o výjimce...207 // 13.5 Výjimky by měly zůstat výjimečné...208 // 14. Závěrečné kolo...211 // 14.1 ermo...211 // 14.2 Proměnné operačního systému...212 // 14.3 Šablony a spřátelené funkce...213 // 14.4 Optimalizace...215 // Optimalizace vracené hodnoty...215 // Přetěžováním ? efektivitě...216 // 14.5 Inicializace globálních proměnných...217 // 14.6 Operátory const_cast a reinterpret_cast...219 // 15. Složité deklarace...221 // 15.1 Začneme od začátku...221 // 15.2 Jak je tedy číst...222 // 15.3 Několik příkladů...222 // 15.4 Označení typu...225 // 15.5 Skok na pevně danou adresu (DOS)...225 // 16. Kompatibilita a přenositelnost...227 // 16.1 Co v C++chybí...227 // Deklarace funkce...227 // Deklarace proměnných...228 // Datové typy...230 // 16.2 Co je v C++jinak...234 // Deklarace funkcí...234 // Konstanty...234 // Znaky...235 // Jména struktur...235 // Makra...235 // Knihovní funkce...236 // Uložení instance v paměti...236 // 16.3 Různé verze jazyka...237 // Virtuální metody...237 // Destruktory...238 // Přístupová práva...238 // Operátory...239 // Výjimky, dynamická identifikace