Programovn v jazyce C Speciality jazyka C vod

  • Slides: 27
Download presentation
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP

Programování v jazyce C++ Speciality jazyka C++, úvod do OOP

Drobná vylepšení C++ komentář //, typ bool, struct, union a enum vytvářejí nové typy,

Drobná vylepšení C++ komentář //, typ bool, struct, union a enum vytvářejí nové typy, operátor přetypování ve funkčním tvaru, rozlišovací operátor : : , operátory čárka, ? : a přiřazovací operátory vytvářejí l-hodnotu, • v cyklech a podmínce můžeme deklarovat novou proměnnou. • • •

Reference • • • pouze v C++, odkazy na objekty, které již existují, příklad:

Reference • • • pouze v C++, odkazy na objekty, které již existují, příklad: – int d = 5; &r = d; • cíl se specifikuje v inicializaci a nejde změnit, • používá se zejména pro předávání parametrů odkazem.

Předávání parametrů odkazem • v C není možné předat parametr funkci odkazem – řeší

Předávání parametrů odkazem • v C není možné předat parametr funkci odkazem – řeší se to přes pointery, • v C++ používáme reference, • příklad: void swap(int &a, int&b) { int c; c = a; a = b; b = c; }

Přetěžování funkcí • anglicky označováno jako overloading, • v C++ je možno deklarovat více

Přetěžování funkcí • anglicky označováno jako overloading, • v C++ je možno deklarovat více funkcí se stejným názvem, • musí se lišit počtem nebo typem parametrů, • funkce nelze rozlišit na základě návratové hodnoty, • nestačí též rozdíl &T a T resp. T a const T, • pomoci si můžeme nepoužitými parametry.

Volba funkce při přetěžování • nejprve vybere funkce s daným počtem parametrů, • vyloučí

Volba funkce při přetěžování • nejprve vybere funkce s daným počtem parametrů, • vyloučí ty, u nichž neexistuje konverze na typ formálního parametru, • dále vybere ty funkce, u nichž je konverze nejsnadnější, • pokud překladač nedokáže jednoznačně vybrat funkci, dochází k chybě.

Snadnost konverze 1. přesná shoda, 2. shoda po roztažení: – char, short, enum ->

Snadnost konverze 1. přesná shoda, 2. shoda po roztažení: – char, short, enum -> int, – float -> double, 3. shoda po standardní konverzi: – float -> int, 1. int -> float, • shoda po uživatelské konverzi.

Komolení jmen • překladač určuje konkrétní funkci podle parametrů, • linker musí mít jména

Komolení jmen • překladač určuje konkrétní funkci podle parametrů, • linker musí mít jména jednoznačná, • 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ů, • takto vzniká vnitřní jméno, které se může objevit v některých chybových hlášeních.

Implicitní parametry • další možnost, jak vytvořit funkce, které mohou být volány s rozdílným

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ů, • 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í.

Inline funkce • v programu je volání funkce nahrazeno jejím tělem, • ušetří se

Inline funkce • 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, • tělo funkce není třeba závorkovat podobně jako u maker, • specifikace inline není pro překladač závazná.

Prostory jmen • namespace, • umožňují lepší orientaci ve velkém množství identifikátorů, • název

Prostory jmen • namespace, • 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 : : , • budeme-li libovolný prostor jmen používat často, můžeme použít příkaz using: – using namespace std;

OOP • OOP umožňuje rozdělit si řešený problém na dílčí celky a s těmi

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. • 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 • jednotlivé objekty s podobnými vlastnostmi jsou sdružovány do tzv. tříd.

Vlastnosti OOP • zapouzdření – každá instance se skládá z datových položek a metod,

Vlastnosti OOP • 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é, • polymorfismus – přestože metoda se jmenuje stejně a má stejné parametry, může se pro každou třídu chovat jinak.

Deklarace třídy v C++ class T { deklarace položek deklarace metod typ jméno( …

Deklarace třídy v C++ class T { deklarace položek deklarace metod typ jméno( … ); deklarace konstruktorů T( … ); deklarace destruktoru ~T(); };

Deklarace třídy v C++ – příklad class zlomek{ int citatel; int jmenovatel; public: zlomek(int

Deklarace třídy v C++ – příklad class zlomek{ int citatel; int jmenovatel; public: zlomek(int c, int j); void pricti(zlomek b); void zkrat(); int vypis(); ~zlomek(); };

Přístupová práva • public (veřejně přístupné položky): – můžeme je použít kdekoliv v programu,

Přístupová práva • public (veřejně přístupné položky): – můžeme je použít kdekoliv v programu, • 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): – 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.

Datové položky • třída smí obsahovat datové položky všech typů až na: – položku

Datové položky • 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.

Deklarace metod • deklarace metod může obsahovat: – paměťové třídy static nebo virtual, –

Deklarace metod • 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), • volatile – práce s nestálými objekty.

Definice metod • metody mohou být definovány v rámci deklarace metody: – pak jsou

Definice metod • 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: – pak je nutno říct, ke které třídě daná metoda patří, – k tomu slouží operátor : : . • v každé metodě je dostupný ukazatel this.

Použití datových položek a metod • pro volání metody a přístupu k datové položce

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: – objekt. metoda(); – objekt. polozka = 5; • u dynamických objektů nutno využít závorky: – (*objekt). metoda(); – (*objekt). polozka = 5; • synonymum je operátor->: – objekt->metoda(); – objekt->polozka = 5;

Vznik objektu při vytváření instance se volá konstruktor, konstruktor se jmenuje stejně jako třída,

Vznik objektu při vytváření instance se volá konstruktor, 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, • instance se vytvářejí takto: • • • – zlomek a, b(1), c(1, 2); • vytvoření dynamické instance: – zlomek *a = new zlomek(1, 2);

Implicitní konstruktor • konstruktor bez parametrů, • je volán při vytváření objektu, pokud nejsou

Implicitní konstruktor • konstruktor bez parametrů, • 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ý, • existují-li jiné konstruktory a nikoliv implicitní, dojde při vytváření objektu bez parametrů k chybě.

Kopírující konstruktor • umožňuje použít při deklaraci objektu inicializaci jiným objektem: – T y

Kopírující konstruktor • umožňuje použít při deklaraci objektu inicializaci jiným objektem: – T y = x; • deklarace: – T (const &t); • není-li deklarován, překladač jej vytvoří, • 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.

Zánik objektu • objekt je připraven k likvidaci pomocí destruktoru, • destruktor má stejný

Zánik objektu • objekt je připraven k likvidaci pomocí destruktoru, • destruktor má stejný název jako třída, pouze má na začátku vlnovku, • destruktor nemá parametry ani návratovou hodnotu, • destruktor by měl uvolnit veškerou alokovanou paměť, • destruktor je volán při zániku instance.

Spřátelené funkce, metody a třídy porušují omezení daná přístupovými právy, prototypu předchází slovo friend,

Spřátelené funkce, metody a třídy porušují omezení daná přístupovými právy, prototypu předchází slovo friend, 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, • uvedeme-li zde definici funkce, stává se inline funkcí. • • •

A na závěr přání fajn víkendu… DĚKUJI ZA POZORNOST

A na závěr přání fajn víkendu… DĚKUJI ZA POZORNOST

Použitá literatura Pavel Herout – Učebnice jazyka C, Miroslav Virius – Od C k

Použitá literatura Pavel Herout – Učebnice jazyka C, Miroslav Virius – Od C k C++, Slajdy na předmět X 36 PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, • Slajdy na předmět 36 PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, • Server www. builder. cz. • • •