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

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

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

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

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

Konstruktory a destruktory

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Více o konstruktorech a destruktorech

PREPROCESOR POKRAČOVÁNÍ

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

Základní datové struktury

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

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

Abstraktní datové typy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Jazyk C++ I. Šablony 2

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Datové struktury. alg12 1

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

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Abstraktní datové typy: zásobník

Ukazka knihy z internetoveho knihkupectvi

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Mělká a hluboká kopie

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.

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

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

Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze

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

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

Objektové programování

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

Jazyk C++ I. Šablony 3

Úvod do programovacích jazyků (Java)

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Virtuální metody - polymorfizmus

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Programování v jazyce C a C++

Abstraktní třídy, polymorfní struktury

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

NMIN201 Objektově orientované programování 1 / :36:09

Algoritmizace prostorových úloh

ADT/ADS = abstraktní datové typy / struktury

Jazyk C++ I. Šablony

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

NPRG031 Programování II 1 / :25:46

PŘETĚŽOVÁNÍ OPERÁTORŮ

Zpracování deklarací a přidělování paměti

Dědění, polymorfismus

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

Základy objektové orientace I. Únor 2010

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

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

24. listopadu 2013, Brno Připravil: David Procházka

Sdílení dat mezi podprogramy

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

IRAE 07/08 Přednáška č. 1

konstruktory a destruktory (o)

Generické programování

Lineární datové struktury

Programování II. Návrh programu I 2018/19

Jazyk C++ I. Polymorfismus

Programování v jazyce C a C++

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

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

Kolekce, cyklus foreach

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Chování konstruktorů a destruktorů při dědění

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Algoritmizace prostorových úloh

Principy objektově orientovaného programování

PROGRAMOVÁNÍ V C++ CVIČENÍ

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

Datové struktury 1: Základní datové struktury

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory

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

8 Třídy, objekty, metody, předávání argumentů metod

Jazyk C# (seminář 6)

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Dynamicky vázané metody. Pozdní vazba, virtuální metody

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

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

Teoretické minimum z PJV

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Základy programování (IZP)

Programování v C++ VI

Základy programování (IZP)

Lineární datové struktury

Přetěžování operátorů

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

Transkript:

Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019

Přehled Přístupová práva 1 Přístupová práva 2 3

Shrnutí minule procvičené látky úvod do objektově orientovaného programování třída, objekt metody, atributy základní vlastnosti zapouzdření specifikace přístupu přístupové metody dědičnost mnohotvárnost

Opakování: přístupová práva tělo třídy rozděleno do sekcí uvozených specifikací přístupu: public položky veřejné sekce přístupné odkudkoliv private položky soukromé sekce dostupné jen v rámci třídy, ve které byly deklarovány protected položky chráněné sekce dostupné jen v rámci třídy, ve které byly deklarovány, a jejích potomcích spřátelené funkce deklarace friend friend prototyp_funkce; friend definiční_deklarace_funkce spřátelené funkce nejsou metodami třídy, ale mají při přístupu ke složkám dané třídy stejná práva jako metody mohou přistupovat k soukromým i chráněným položkám

Příklad spřátelené funkce 1 class TVektor{ 2 public: 3 TVektor(); 4 TVektor(float, float); 5 void nastavx(float x0){x = x0;} 6 void nastavy(float y0){y = y0;} 7 friend float delka(tvektor v){ 8 return sqrt(v.x*v.x+v.y*v.y); 9 } 10 private: 11 float x, y; 12 };

Přehled Přístupová práva 1 Přístupová práva 2 3

Statické metody a atributy třídní metody a atributy pamět ová třída static statické atributy společné pro všechny instance dané třídy globální proměnná ukrytá v těle třídy statické atributy lze použít mimo třídu (pokud to povolí přístupová práva) kvalifikace jménem instance (.) nebo třídy (::) definiční deklarace za deklarací třídy statické metody nevztahují se k žádné konkrétní instanci nemohou používat nestatické atributy a nestatické metody

Příklad použití Přístupová práva 1 //TVektor.h 2 class TVektor{ 3 public: 4 TVektor(); 5 static int Pocet(); 6 private: 7 float x, y; 8 static int pocet; 9 }; 10 //TVektor.cpp 11 int TVektor::pocet = 0; //definicni deklarace 12 TVektor::TVektor(){ x = 0; y = 0; pocet++} 13 int TVektor::Pocet(){ return pocet; }

Přehled Přístupová práva 1 Přístupová práva 2 3

Konstruktor Přístupová práva metoda sloužící k inicializaci instance konstruktor nelze volat přímo, volán automaticky při: vytváření instancí v deklaraci nebo pomocí operátoru new předávání parametrů objektového typu hodnotou konverzích jméno konstruktoru stejné jako identifikátor třídy deklarace neobsahuje typ vrácené hodnoty konstruktory se nedědí konstruktor nesmí být virtuální ani statický konstruktor může mít parametry libovolného typu s výjimkou typu své třídy (ale reference na svou třídu parametrem být může => kopírovací konstruktor)

Inicializační část konstruktoru inicializace nestatických atributů předání parametrů konstruktorům předků syntaxe: inicializační_část identifikátor(seznam_výrazů nep ) identifikátor(seznam_výrazů nep ), inicializační_část inicializační část proběhne před vstupem do těla konstruktoru před vstupem do těla také zavolány konstruktory předků inicializace v inicializační části v pořadí, ve kterém jsou složky uvedeny v deklaraci třídy konstantní složky lze nastavit jen v inicializační části

Příklady Přístupová práva 1 konstruktor bez parametrů 1 TVektor::TVektor() 2 : x(0), y(0) 3 { 4 pocet++; //zvetsi pocet instanci 5 } 2 konstruktor se dvěma parametry 1 TVektor::TVektor(float x0, float y0) 2 : x(x0), y(y0) 3 { 4 pocet++; //zvetsi pocet instanci 5 }

Zásobník Přístupová práva datová struktura typu LIFO: last in, first out data se vkládají na jedné straně (vrchol zásobníku, stack pointer) a z té stejné strany se odebírají základní operace 1 push vložení dat na vrchol zásobníku 2 top získání dat z vrcholu zásobníku 3 pop odstranění vrcholu 4 empty test prázdnosti 5 full test plnosti jako podkladová datová struktura lze použít pole nebo spojový seznam součást standardní šablonové knihovny (šablona stack) role zásobníku v přidělování paměti

Vytvoření a zrušení zásobníku definice typu 1 typedef int Data; 2 struct Stack{ 3 int size; 4 int sp; //stack pointer 5 Data *data; 6 }; v neobjektovém přístupu nejsou konstruktory a destruktory 1 void create(stack &s, int n){ 2 s.size = n; 3 s.sp = -1; 4 s.data = new Data[s.size]; 5 } 6 void destroy(stack &s){ 7 delete [] s.data; 8 s.data = nullptr; 9 } ]

Implementace základních operací 1 void push(stack &s, Data &d){ 2 s.sp++; 3 s.data[s.sp] = d; 4 } 5 6 Data top(stack &s){ 7 return s.data[s.sp]; 8 } 9 10 void pop(stack &s){ 11 s.sp--; 12 } kontroly plnosti/prázdnosti před vložením/odebráním prvku ošetření pomocí výjimek

Nevýhody neobjektové implementace funkce nejsou součástí struktury stack nutno přidávat zásobník jako parametr nutno volat funkce create a destroy chybí zapouzdření možnost přistupovat i mimo vrchol zásobníku možnost posunovat index na vrchol možnost uvolnit pole vůbec nejsou zabezpečená data snaha přistupovat k datům pouze pomocí funkcí (v objektovém přístupu pomocí metod)

Závěr Přístupová práva spřátelené funkce statické metody a atributy konstruktory význam inicializační část neobjektová implementace zásobníku uložení dat do dynamického pole základní operace vložení na vrchol zásobníku získání hodnoty z vrcholu zásobníku odstranění vrcholu test prázdnosti nevýhody neobjektové implementace