Programovn v jazyce C Speciality jazyka C vod
- Slides: 27
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, 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: – 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ší 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 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čí 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 -> 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 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 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 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 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 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, • 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 konstruktorů T( … ); deklarace destruktoru ~T(); };
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, • 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 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, – 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 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 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, 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 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 = 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ý 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, 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
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. • • •
- Pharmaconomy in homoeopathy
- Layout toko supermarket
- Fcps uk
- Prince william county schools specialty programs
- Respiratory sce
- My future profession programmer presentation
- Jenis-jenis layout toko
- Co je to marketing
- Ztv vod
- Zakupljeni vod
- Vod
- Vod marketing
- Trojan tv iptv
- Rw + vo c inverter transient response vod inverte...
- Tulipan vod
- Ztv vod
- Koliki je razmak izmedju bandera
- Iptv vod italia
- Znakovlje
- Processus palatini maxillarum
- Glandula parotis histologie
- Tvarová rovina jazyka
- Horká chuť na koreni jazyka
- Nauka o zvukové stránce jazyka
- Vznik slovenského jazyka
- štandardná forma jazyka
- Funkcie jazyka
- Stylova vrstva jazyka