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

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

(instance konkrétní třídy)
ÚVOD DO C++ 3 TŘÍDY a objekty - POKRAČOVÁNÍ
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Úvod do objektově orientovaného programování
OOP OOP (Object Oriented Programming)
25/08/20141 Typ struktura (1) Datový typ struktura ( struct ) je agrego- vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Programování v C++ Cvičení.
Algoritmizace a programování
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Datové struktury. 2 Co je datová struktura v C datový typ složený z jiných datových typů nejjednodušší datová struktura je pole. všechny jeho prvky jsou.
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Třída jako zdroj funkcionality
Objektové programování
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Současný svět Projekt č. CZ /3. 1
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
6. cvičení Polymorfismus
Počítače a programování 1
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
JavaScript Funkce.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Programování v jazyce C++
Programování v jazyce C++ Dědičnost a polymorfismus.
Překladače 6. Sémantická analýza
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Y36PJC Programování v jazyce C/C++
Úvod do C# - OOP Jaroslav BURDYS 4IT.
OOP OOP (Object Oriented Programming)
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Y36PJC Programování v jazyce C/C++
Překladače Syntaktická analýza
Programování v jazyce C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Programování v jazyce C++
Programování v jazyce C++
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Oblast platnosti identifikátoru (1)
Programování v jazyce C++
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

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

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.

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.

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; }

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.

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ě.

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.

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.

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í.

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á.

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;

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.

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.

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();};

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();};

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.

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.

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.

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.

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;

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);

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ě.

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.

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.

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í.

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

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 Server