OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů... 8-1 8.2 Standardně zavedené proudy... 8-1 8.



Podobné dokumenty
PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

ELEKTRONICKÉ PRVKY 7 Výkonové a spínací aplikace tranzistorů 7.1 Ztrátový výkon a chlazení součástky První a druhý průraz bipolárního

APLIKACE MIKROKONTROLÉRŮ PIC32MX

4 DIELEKTRICKÉ OBVODY ZÁKLADNÍ POJMY DIELEKTRICKÝCH OBVODŮ Základní veličiny a zákony Sériový a paralelní

MIKROPROCESOROVÁ TECHNIKA 9 Událostní systém 9.1 Události Síť ERN Časování událostí Filtrace

ALGORITMY ČÍSLICOVÉHO ZPRACOVÁNÍ SIGNÁLŮ



MIKROKONTROLÉRY PIC PRO POKROČILÉ




Gergelitsová, Holan: Zlatý řez pravítkem a kružítkem


APLIKACE ALGORITMŮ ČÍSLICOVÉHO ZPRACOVÁNÍ SIGNÁLŮ 1. DÍL



Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Jan Humlhans NÁBOJOVÉ PUMPY funkce, pøehled a použití Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmno

Autor by chtìl podìkovat všem svým spolupracovníkùm a kolegùm, kteøí mu pomohli s pøípravou textu. K vydání knihy pøispìla firma Newport Electronics s



Podìkování: Výsledkù publikovaných v této knize bylo dosaženo také za podpory projektù GAÈR 101/06/P108 Výzkum simulaèního a experimentálního modelová

Komerèní využití stavebních návodù je povoleno jen s písemným souhlasem autora a nakladatelství. Soubory na CD ROM mající pøímo vztah ke knize, které

Základy ultrazvuku A. ZÁKLADY ULTRAZVUKU 10




MIKROKONTROLÉRY PIC BEZ PŘEDCHOZÍCH ZNALOSTÍ



Monografie poskytuje v pøehledné a praktické formì znalosti a výpoèetní nástroje pro modelování šíøení rádiových vln v zástavbì, tedy vnì i uvnitø bud

Publikace prezentuje nìkteré poznatky z obsáhlé oblasti analogových soustav, které v poslední dobì prodìlávají rozvoj. Z toho dùvodu ani nemùže podat

Programování v C++ 2, 4. cvičení

Ladislav Szántó: Maxwellovy rovnice, 2. vydání

Translation from the English language edition: Passing the marker Understanding the New Millennium Energy Copyright 2000 Lee Carroll All Rights Reserv



Roman Neruda a Tomáš Holan C++ BUILDER V PØÍKLADECH Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnožo


Ukazka knihy z internetoveho knihkupectvi

David Matoušek ÈÍSLICOVÁ TECHNIKA základy konstruktérské praxe Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována ne

Tato kniha popisuje výchozí stanoviska psychotroniky jako potenciální vìdní disciplíny Tvoøí ucelenou pracovní hypotézu pro realizaci základního výzku






Jan Hájek ELEKTRONICKÉ HLEDAÈE Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnožována jakoukoli formou

Programování v C++ 2, 7. cvičení






PB161 Programování v jazyce C++ Přednáška 9





MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Programování v C++ 1, 5. cvičení


IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

Šablony, kontejnery a iterátory



Šablony, kontejnery a iterátory

Programování v C++ 1, 6. cvičení





Jazyk C++ II. STL knihovna kontejnery část 1



Abstraktní datové typy

Jazyk C++ II. STL knihovna kontejnery část 2

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.



Jazyky C a C++ kompletní průvodce 2., aktualizované vydání. Miroslav Virius

PB161 Programování v jazyce C++ Přednáška 3


Programování II. Návrh programu II


přetížení operátorů (o)


Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

PB161 Programování v jazyce C++ Přednáška 4

Jazyk C++ I. Polymorfismus

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

Generické programování

Dědění, polymorfismus

Programování v C++ 1, 1. cvičení


Konstruktory a destruktory

Objektové programování

Transkript:

David MATOUŠEK OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PØÍKLADECH Praha 2011

David Matoušek Objektové programování v C++ v pøíkladech Lektoroval Ing. Bohumil Brtník, Ph.D. Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnožována jakoukoli formou (tisk, fotokopie, mikrofilm nebo jiný postup), zadána do informaèního systému nebo pøenášena v jiné formì èi jinými prostøedky. Autoøi a nakladatelství nepøejímají záruku za správnost tištìných materiálù. Pøedkládané informace jsou zveøejnìny bez ohledu na pøípadné patenty tøetích osob. Nároky na odškodnìní na základì zmìn, chyb nebo vynechání jsou zásadnì vylouèeny. Všechny registrované nebo jiné obchodní známky použité v této knize jsou majetkem jejich vlastníkù. Uvedením nejsou zpochybnìna z toho vyplývající vlastnická práva. Veškerá práva vyhrazena David Matoušek, 2011 Nakladatelství BEN technická literatura, Vìšínova 5, Praha 10 David Matoušek: Objektové programování v C++ v pøíkladech BEN technická literatura, Praha 2011 1. vydání ISBN 978-80-7300-421-7 (tištìná kniha) ISBN 978-80-7300-422-4 (elektronická kniha v PDF)

OBSAH Obsah 1 Základní odlišnosti mezi jazyky C a C++ 1.1 Deklarace je příkaz...1-1 1.2 Funkce...1-1 1.3 Insertor a extraktor...1-3 1.4 Operátory pro správu dynamické paměti...1-4 1.5 Zjednodušená definice datových typů...1-5 1.6 Datový typ bool...1-5 1.7 Příklad PROG_01-01...1-5 1.8 Příklad PROG_01-02...1-7 1.9 Proudové manipulátory...1-8 2 Základy OOP v jazyce C++ 2.1 Příklad PROG_02-01 Definice třídy TRetez...2-2 2.2 Příklad PROG_02-02 Třída TRetez s konstruktorem...2-4 2.3 Příklad PROG_02-03 Bezparametrický konstruktor...2-5 2.4 Příklad PROG_02-04 Třída TRetez s destruktorem...2-6 2.5 Příklad PROG_02-05 Kopírovací konstruktor...2-9 2.6 Ukazatel this...2-11 2.7 Dynamická alokace instance třídy...2-11 2.8 Diagram třídy...2-11 2.9 Inline zápis...2-12 2.10 Shrnutí...2-12 3 Dědičnost základní informace 3.1 PROG_03-01 Příklad hierarchie tříd...3-1 3.2 Podrobnější pohled na dědičnost...3-4 3.3 PROG_03-02 Polymorfní pole...3-5 3.4 Podrobnější výklad virtuálních metod...3-7 3.5 RTTI dynamická identifikace typů...3-8 4 Dědičnost doplnění 4.1 Operátory pro přetypování...4-1 4.2 Abstraktní třída a čisté virtuální metody...4-1 4.3 PROG_04-01 Hierarchie tříd s abstraktní bází...4-2 4.4 Polymorfismus a parametry volané odkazem...4-8 4.5 Vícenásobná dědičnost...4-9 4.6 Shrnutí kapitol 3 a 4...4-10 5 Výjimky 5.1 PROG_05-01 ošetření výjimek...5-2 5.2 Rozšiřující informace o operátorech new a delete...5-3 6 Přetěžování operátorů základní informace 6.1 PROG_06-01 motivační případ...6-1 6.2 Pravidla pro přetěžování operátorů...6-2 6.3 Unární operátory (operátory s jedním operandem)...6-3 6.4 Binární operátory (operátory se dvěma operandy)...6-3 6.5 Některé zvláštnosti...6-4 6.6 PROG_06-02 vylepšení třídy TKomplex...6-6 7 Přetěžování operátorů vylepšení třídy TRetez 7.1 Spřátelené třídy a funkce...7-1 7.2 PROG_07-01 řetězcová třída TString...7-2 7.3 Mělká a hluboká kopie...7-7 7.4 Další možná rozšíření třídy TString...7-7 i

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů... 8-1 8.2 Standardně zavedené proudy... 8-1 8.3 Základní třídy... 8-1 8.4 Souborové proudy... 8-2 8.5 Řetězcové proudy... 8-4 8.6 Další metody proudů... 8-5 8.7 PROG_08-05: Definice vlastních proudových manipulátorů... 8-9 9 Konstantní a statické členy 9.1 Konstantní členy... 9-1 9.2 Statické členy... 9-4 10 ADT abstraktní datové typy 10.1 Zopakování a doplnění informací o datových typech... 10-1 10.2 Vložené datové typy... 10-2 10.3 Abstraktní datový typ (ADT)... 10-2 10.4 ADT seznam (PROG_10-01)... 10-2 10.5 ADT polymorfní seznam (PROG_10-02)... 10-7 10.6 Shrnutí a doplnění informací... 10-10 11 Pokročilejší abstraktní datové typy 11.1 ADT zásobník... 11-1 11.2 ADT fronta... 11-7 12 ADT seznam s ukazovátkem 12.1 Základní vlastnosti... 12-1 12.2 Implementace... 12-3 12.3 Testovací příklad... 12-8 13 Šablony 13.1 Genericita... 13-1 13.2 Šablony funkcí... 13-1 13.3 Šablony objektových typů a jejich metod... 13-5 14 Zbývající rysy jazyka C++ 14.1 Prostory jmen (jmenné prostory)... 14-1 14.2 Ukazatele do tříd ( třídní ukazatele)... 14-3 15 STL Standard Template Library 15.1 Kontejner vector... 15-1 15.2 Algoritmy... 15-8 15.3 Kontejner list... 15-10 15.4 Kontejner deque... 15-10 15.5 Kontejner stack... 15-10 15.6 Kontejner queue... 15-11 15.7 Kontejner map... 15-11 ii

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH Předmluva Tato kniha vznikla především pro podporu výuky předmětu Objektové programování v C++ na oboru Počítačové systémy na Vysoké škole polytechnické v Jihlavě. Zejména je určena pro studenty kombinované formy studia. Kniha je určena rovněž všem zájemcům o objektové programování v jazyce C++, kteří již mají předchozí znalosti jazyka C minimálně v rozsahu daném [1]. Text je budován tak, aby čtenář mohl postupně vlastními silami pochopit objektové programování v jazyce C++. Výklad je doplněn celkem 39 řešenými příklady. První kapitola uvádí základní odlišnosti mezi jazyky C a C++ bez ohledu na objektové vlastnosti. Jedná se zejména o přetěžovaní a implicitní parametry funkcí, volání odkazem a použití proudů. Ve druhé kapitole se seznámíme se základy objektového programování v C++. Budou vysvětleny pojmy: zapouzdření, atribut, metoda, úroveň přístupu, konstruktor a destruktor. Kapitoly 3 a 4 vysvětlují dědičnost a spojené pojmy jako polymorfismus, virtuální metody, RTTI, abstraktní třídy, čisté virtuální metody. V páté kapitole se probírají výjimky a jsou doplněny informace o operátorech new a delete. Kapitoly 6 a 7 probírají přetěžování operátorů. Formou praktických příkladů je ukázáno přetížení operátorů pro práci s komplexními čísly a realizace třídy pro práci s řetězci. Dále jsou vysvětleny související pojmy spřátelených tříd a funkcí, mělká a hluboká kopie. Osmá kapitola doplňuje informace k proudové knihovně. Je uvedena hierarchie proudů, proudy specializované na práci se soubory a řetězci. Připojena je též ukázka definování uživatelských proudových manipulátorů. Devátá kapitola probírá konstantní a statické členy, tedy konstantní a statické atributy nebo metody. Kapitoly 10, 11 a 12 jsou věnovány abstraktním datovým typům (ADT). Nejdříve jsou zopakovány obecné informace o datových typech, dále se probírají pojmy signatura a axiom. Jednotlivé příklady jsou zaměřeny na jednosměrný spojový seznam, polymorfní seznam, zásobník, frontu a obousměrný seznam s ukazovátkem. Třináctá kapitola probírá šablony a genericitu, hlavním příkladem je šablona zásobníku. Čtrnáctá kapitola doplňuje zbývající rysy jazyka C++ tedy prostory jmen a ukazatele do tříd. Patnáctá kapitola je úvodem do standardní knihovny šablon (STL). Probírány jsou zejména šablony vector a map a dále iterátory a algoritmy. Zdrojové kódy příkladů je možné získat přímo od autora, e-mail: matousek@vspj.cz.