Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP
2
Drobná vylepšení C++ komentář //, komentář //, typ bool, typ bool, struct, union a enum vytvářejí nové typy, struct, union a enum vytvářejí nové typy, operátor přetypování ve funkčním tvaru, operátor přetypování ve funkčním tvaru, rozlišovací operátor ::, rozlišovací operátor ::, operátory čárka, ?: a přiřazovací operátory vytvářejí l-hodnotu, operátory čárka, ?: a přiřazovací operátory vytvářejí l-hodnotu, v cyklech a podmínce můžeme deklarovat novou proměnnou. v cyklech a podmínce můžeme deklarovat novou proměnnou.
3
Reference pouze v C++, pouze v C++, odkazy na objekty, které již existují, odkazy na objekty, které již existují, příklad: příklad: – int d = 5; int &r = d; cíl se specifikuje v inicializaci a nejde změnit, cíl se specifikuje v inicializaci a nejde změnit, používá se zejména pro předávání parametrů odkazem. používá se zejména pro předávání parametrů odkazem.
4
Předávání parametrů odkazem v C není možné předat parametr funkci odkazem – řeší se to přes pointery, v C není možné předat parametr funkci odkazem – řeší se to přes pointery, v C++ používáme reference, v C++ používáme reference, příklad: příklad: void swap(int &a, int&b) { int c; c = a; a = b; b = c; }
5
Přetěžování funkcí anglicky označováno jako overloading, anglicky označováno jako overloading, v C++ je možno deklarovat více funkcí se stejným názvem, v C++ je možno deklarovat více funkcí se stejným názvem, musí se lišit počtem nebo typem parametrů, musí se lišit počtem nebo typem parametrů, funkce nelze rozlišit na základě návratové hodnoty, funkce nelze rozlišit na základě návratové hodnoty, nestačí též rozdíl &T a T resp. T a const T, nestačí též rozdíl &T a T resp. T a const T, pomoci si můžeme nepoužitými parametry. pomoci si můžeme nepoužitými parametry.
6
Volba funkce při přetěžování nejprve vybere funkce s daným počtem parametrů, nejprve vybere funkce s daným počtem parametrů, vyloučí ty, u nichž neexistuje konverze na typ formálního parametru, vyloučí ty, u nichž neexistuje konverze na typ formálního parametru, dále vybere ty funkce, u nichž je konverze nejsnadnější, dále vybere ty funkce, u nichž je konverze nejsnadnější, pokud překladač nedokáže jednoznačně vybrat funkci, dochází k chybě. pokud překladač nedokáže jednoznačně vybrat funkci, dochází k chybě.
7
Snadnost konverze 1.přesná shoda, 2.shoda po roztažení: – char, short, enum -> int, – float -> double, 3.shoda po standardní konverzi: – float -> int, – int -> float, 4.shoda po uživatelské konverzi.
8
Komolení jmen překladač určuje konkrétní funkci podle parametrů, překladač určuje konkrétní funkci podle parametrů, linker musí mít jména jednoznačná, linker musí mít jména jednoznačná, překladač tedy musí funkce odlišit, překladač tedy musí funkce odlišit, k názvu funkce připojí řetězec popisující počet a typy jednotlivých formálních parametrů, k názvu funkce připojí řetězec popisující počet a typy jednotlivých formálních parametrů, takto vzniká vnitřní jméno, které se může objevit v některých chybových hlášeních. takto vzniká vnitřní jméno, které se může objevit v některých chybových hlášeních.
9
Implicitní parametry další možnost, jak vytvořit funkce, které mohou být volány s rozdílným počtem skutečných parametrů, další možnost, jak vytvořit funkce, které mohou být volány s rozdílným počtem skutečných parametrů, pokud je nastavena implicitní hodnota jednoho parametru, musí být nastaveny implicitní hodnoty všech následujících, pokud je nastavena implicitní hodnota jednoho parametru, musí být nastaveny implicitní hodnoty všech následujících, je-li při volání vynechán libovolný parametr, musí být vynechány všechny následující. je-li při volání vynechán libovolný parametr, musí být vynechány všechny následující.
10
Inline funkce v programu je volání funkce nahrazeno jejím tělem, v programu je volání funkce nahrazeno jejím tělem, ušetří se za režii – nedochází k předávání parametrů a návratové hodnoty, ušetří se za režii – nedochází k předávání parametrů a návratové hodnoty, tělo funkce není třeba závorkovat podobně jako u maker, tělo funkce není třeba závorkovat podobně jako u maker, specifikace inline není pro překladač závazná. specifikace inline není pro překladač závazná.
11
Prostory jmen namespace, namespace, umožňují lepší orientaci ve velkém množství identifikátorů, umožňují lepší orientaci ve velkém množství identifikátorů, název jmenného prostoru se přidává před název identifikátorů s operátorem ::, název jmenného prostoru se přidává před název identifikátorů s operátorem ::, budeme-li libovolný prostor jmen používat často, můžeme použít příkaz using : budeme-li libovolný prostor jmen používat často, můžeme použít příkaz using : – using namespace std;
12
OOP OOP umožňuje rozdělit si řešený problém na dílčí celky a s těmi pracovat nezávisle na ostatních. OOP umožňuje rozdělit si řešený problém na dílčí celky a s těmi pracovat nezávisle na ostatních. nemusíme vědět, jak je daný celek implementován, stačí nám znát, jak se používá. nemusíme vědět, jak je daný celek implementován, stačí nám znát, jak se používá. základním principem OOP je modelovat jednotlivé objekty co nejvíce podobné reálnému světu základním principem OOP je modelovat jednotlivé objekty co nejvíce podobné reálnému světu jednotlivé objekty s podobnými vlastnostmi jsou sdružovány do tzv. tříd. jednotlivé objekty s podobnými vlastnostmi jsou sdružovány do tzv. tříd.
13
Vlastnosti OOP zapouzdření – každá instance se skládá z datových položek a metod, zapouzdření – každá instance se skládá z datových položek a metod, dědičnost – jsou-li si dvě třídy podobné, není nutné definovat všem třídám všechny metody a vlastnosti – jedna je může podědit od druhé, dědičnost – jsou-li si dvě třídy podobné, není nutné definovat všem třídám všechny metody a vlastnosti – jedna je může podědit od druhé, polymorfismus – přestože metoda se jmenuje stejně a má stejné parametry, může se pro každou třídu chovat jinak. polymorfismus – přestože metoda se jmenuje stejně a má stejné parametry, může se pro každou třídu chovat jinak.
14
Deklarace třídy v C++ class T { deklarace položek deklarace položek deklarace metod deklarace metod typ jméno( … ); deklarace konstruktorů deklarace konstruktorů T( … ); deklarace destruktoru deklarace destruktoru~T();};
15
Deklarace třídy v C++ – příklad class zlomek{ int citatel; int citatel; int jmenovatel; int jmenovatel;public: zlomek(int c, int j); zlomek(int c, int j); void pricti(zlomek b); void pricti(zlomek b); void zkrat(); int vypis(); int vypis();~zlomek();};
16
Přístupová práva public (veřejně přístupné položky): public (veřejně přístupné položky): – můžeme je použít kdekoliv v programu, private (soukromé položky): private (soukromé položky): – můžeme je použít pouze v metodách třídy nebo spřátelených funkcích, protected (chráněné položky): protected (chráněné položky): – můžeme je použít pouze v metodách této třídy nebo tříd odvozených případně ve spřátelených funkcích.
17
Datové položky třída smí obsahovat datové položky všech typů až na: třída smí obsahovat datové položky všech typů až na: – položku právě deklarované třídy, – pole typu právě deklarované třídy, – položku typu odvozeného od právě deklarované třídy, – položku typu, který dosud byl pouze předběžně deklarován.
18
Deklarace metod deklarace metod může obsahovat: deklarace metod může obsahovat: – paměťové třídy static nebo virtual, – specifikaci inline, – modifikátor const nebo volatile za závorkou ukončující seznam parametrů, const – daná metoda nemění hodnotu instance (lze volat na konstantní i nekonstantní objekty), const – daná metoda nemění hodnotu instance (lze volat na konstantní i nekonstantní objekty), volatile – práce s nestálými objekty. volatile – práce s nestálými objekty.
19
Definice metod metody mohou být definovány v rámci deklarace metody: metody mohou být definovány v rámci deklarace metody: – pak jsou přeloženy jako inline, – deklarace metody uvnitř deklarace třídy se ukončuje středníkem, definice ne, nebo mohou být definovány mimo: nebo mohou být definovány mimo: – pak je nutno říct, ke které třídě daná metoda patří, – k tomu slouží operátor ::. v každé metodě je dostupný ukazatel this. v každé metodě je dostupný ukazatel this.
20
Použití datových položek a metod pro volání metody a přístupu k datové položce se využívá tečková notace: pro volání metody a přístupu k datové položce se využívá tečková notace: – objekt.metoda(); – objekt.polozka = 5; u dynamických objektů nutno využít závorky: u dynamických objektů nutno využít závorky: – (*objekt).metoda(); – (*objekt).polozka = 5; synonymum je operátor -> : synonymum je operátor -> : – objekt->metoda(); – objekt->polozka = 5;
21
Vznik objektu při vytváření instance se volá konstruktor, při vytváření instance se volá konstruktor, konstruktor se jmenuje stejně jako třída, konstruktor se jmenuje stejně jako třída, konstruktor může obsahovat za deklarací dvojtečku a seznam položek s inicializačními hodnotami v závorkách, konstruktor může obsahovat za deklarací dvojtečku a seznam položek s inicializačními hodnotami v závorkách, instance se vytvářejí takto: instance se vytvářejí takto: – zlomek a, b(1), c(1,2); vytvoření dynamické instance: vytvoření dynamické instance: – zlomek *a = new zlomek(1, 2);
22
Implicitní konstruktor konstruktor bez parametrů, konstruktor bez parametrů, je volán při vytváření objektu, pokud nejsou zadány skutečné parametry, je volán při vytváření objektu, pokud nejsou zadány skutečné parametry, v případě potřeby je vygenerován automaticky, ale pouze za předpokladu, že neexistuje jiný, v případě potřeby je vygenerován automaticky, ale pouze za předpokladu, že neexistuje jiný, existují-li jiné konstruktory a nikoliv implicitní, dojde při vytváření objektu bez parametrů k chybě. existují-li jiné konstruktory a nikoliv implicitní, dojde při vytváření objektu bez parametrů k chybě.
23
Kopírující konstruktor umožňuje použít při deklaraci objektu inicializaci jiným objektem: umožňuje použít při deklaraci objektu inicializaci jiným objektem: – T y = x; deklarace: deklarace: – T (const &t); není-li deklarován, překladač jej vytvoří, není-li deklarován, překladač jej vytvoří, objekty jsou kopírovány pomocí kopírujících konstruktorů, ostatní po bitech, objekty jsou kopírovány pomocí kopírujících konstruktorů, ostatní po bitech, generovaný není možné úspěšně použít, pokud jiný konstruktor alokuje paměť a destruktor uvolňuje. generovaný není možné úspěšně použít, pokud jiný konstruktor alokuje paměť a destruktor uvolňuje.
24
Zánik objektu objekt je připraven k likvidaci pomocí destruktoru, objekt je připraven k likvidaci pomocí destruktoru, destruktor má stejný název jako třída, pouze má na začátku vlnovku, destruktor má stejný název jako třída, pouze má na začátku vlnovku, destruktor nemá parametry ani návratovou hodnotu, destruktor nemá parametry ani návratovou hodnotu, destruktor by měl uvolnit veškerou alokovanou paměť, destruktor by měl uvolnit veškerou alokovanou paměť, destruktor je volán při zániku instance. destruktor je volán při zániku instance.
25
Spřátelené funkce, metody a třídy porušují omezení daná přístupovými právy, porušují omezení daná přístupovými právy, prototypu předchází slovo friend, prototypu předchází slovo friend, v každé deklaraci friend smí být pouze jedna metoda, funkce či třída, v každé deklaraci friend smí být pouze jedna metoda, funkce či třída, je-li spřátelená třída, stávají se spřátelenými všechny její metody, je-li spřátelená třída, stávají se spřátelenými všechny její metody, uvedeme-li zde definici funkce, stává se inline funkcí. uvedeme-li zde definici funkce, stává se inline funkcí.
26
DĚKUJI ZA POZORNOST A na závěr přání fajn víkendu…
27
Použitá literatura Pavel Herout – Učebnice jazyka C, Pavel Herout – Učebnice jazyka C, Miroslav Virius – Od C k C++, Miroslav Virius – Od C k C++, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Server www.builder.cz. Server www.builder.cz.
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.