Konstruktory a destruktory
|
|
- Danuše Beránková
- před 5 lety
- Počet zobrazení:
Transkript
1 Konstruktory a destruktory
2 Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat, není spolehlivé není zaručeno, že ji programátor, či spíše další uživatel knihovny, nezapomene zavolat
3 Bezpečné pole z minulé hodiny class BezpPole { private: int n,akt,*pole; public: void vloz(int prvek); int vrat_prvek(int index); int vrat_akt_pocet(); void init(); };
4 Bezpečné pole z minulé hodiny void main() { int i; BezpPole a; a.init(); // na init nesmíme zapomenout a.vloz(3); a.vloz(4); a.vloz(2); for(i=0;i<a.vrat_akt_pocet();i++) cout << a.vrat_prvek(i) << endl; }
5 Konstruktor OOP poskytuje prostředek pro počáteční inicializaci (nejen) atributů tzv. konstruktor
6 Konstruktor jde o speciální metodu, která je automaticky vyvolána při vzniku objektu konstruktor musí přirozeně programátor naprogramovat slouží pro počáteční inicializaci objektu pokud není konstruktor definován, překladač jej vytvoří automaticky (implicitní), který ale hodnoty atributů neinicializuje (prázdný)
7 konstruktor má stejný identifikátor jako je jméno (identifikátor) třídy t.j. musíme deklarovat a vytvořit metodu se stejným názvem jako jméno třídy a ta je automaticky konstruktorem konstruktor nevrací žádná data, není deklarován ani jako void! parametry může mít libovolné, lze jej přetížit je to dokonce i vhodné, abychom mohli inicializovat objekt různými způsoby je vhodné mít vždy implicitní konstruktor (bez parametrů)
8 class TKomplex { float re,im; //reálná a imag. část public: void set_num(float real, float imag); float vrat_real() { return re; }; float vrat_imag(); float velikost(); TKomplex(); implicitní konstruktor TKomplex(float real, float imag); }; přetížený konstruktor
9 implementace TKomplex::TKomplex() { re = im = 0; } TKomplex::TKomplex(float real, float imag) { re = real; im = imag; }
10 použití void main() { TKomplex k_cislo; TKomplex c1(1,1); TKomplex *pc1,*pc2; zde se volá implicitní konstruktor zde se volá přetížený konstruktor } pc1 = new TKomplex(5,10); zde se volá implicitní pc2 = new TKomplex(); konstruktor float vel = k_cislo.velikost(); vel = pc1 -> velikost(); delete pc1; delete pc2;
11 pokud deklarujeme konstruktor s parametry, musíme deklarovat a implementovat i implicitní, chceme-li jej využívat pak již implicitní konstruktor není generován automaticky při vzniku objektu se nejprve alokuje paměť pro objekt (pro atributy) a pak se volá konstruktor v konstruktoru zpravidla inicializujeme atributy nebo alokujeme potřebnou dynamickou paměť, jestliže ji objekt využívá ruší se pak v destruktoru
12 konstruktor nelze dodatečně vyvolat void main(void) { TKomplex c; } c.tkomplex(2,2); chyba
13 explicitní volání konstruktoru znamená vytvoření dočasného (nepojmenovaného) objektu, který se po použití automaticky zruší TKomplex a; a = TKomplex(3,4); do proměnné a se zkopíruje hodnota dočasného objektu, ve kterém je re=3 a im=4
14 a 3 4 kopie dočasný objekt 3 4 po zkopírování do a se objekt zruší
15 Poznámka: inicializaci atributů lze v konstruktoru provést pomocí inicializátorů (při deklaraci třídy jako in-line konstruktor nebo při implementaci v souboru.cpp) u atributů typu reference, konstantních atributů a objektových atributů, kde není ve třídě definován implicitní konstruktor, je to jediná možnost class TKomplex { float re, im; public: } TKomplex(): re(0),im(0) {}; TKomplex(float x, float y): re(x),im(y) {};
16 konstruktor s inicializátory v souboru.cpp: TKomplex::TKomplex(): re(0),im(0) { } TKomplex::TKomplex(float x, float y): re(x),im(y) { }
17 class A { int x; bool barevne; public: // máme jen konstruktor s parametry A(bool b); }; A::A(bool b) { x = 0; barevne = b; }
18 class B { int z; A a; public: B(); B(bool b); }; B::B(): a(true) { z = 0; } B::B(bool b): a(b),z(0) { }
19 Úkol Doplňte třídu pro uložení bodů z minulého cvičení o konstruktor. Definujte dva přetížené konstruktory implicitního konstruktor, který inicializuje souřadnice bodu na počátek konstruktor se souřadnicemi px,py
20 Destruktor speciální metoda, která je automaticky volána při rušení objektu nejprve je zavolán destruktor nad objektem a pak je objekt zrušen (dealokována paměť) typicky: pokud je v konstruktoru dynamicky alokována paměť, pak je v destruktoru provedena dealokace změna statických (třídních) atributů
21 destruktor má stejný identifikátor jako je jméno třídy a od konstruktoru je odlišen úvodním znakem ~ (vlnovka) t.j. musíme deklarovat a vytvořit metodu se stejným názvem jako jméno třídy uvozenou vlnovkou a ta je automaticky destruktorem destruktor nesmí mít žádné parametry a nevrací žádnou hodnotu destruktor lze vyvolat přímo
22 Příklad - fronta datová struktura typu FIFO First In - First Out prvky se odebírají v pořadí, jak byly vkládány
23 Možné implementace jako spojový seznam neomezená velikost fronty (omezená pouze velikostí dostupné paměti) operace vložení prvku znamená vložení prvku na konec seznamu operace výběr prvku je výběr z čela fronty polem pevné délky fronta s omezenou velikostí implementuje se jako tzv. kruhová fronta
24 Implementace pomocí pole pevné délky fronta je reprezentována polem a indexem čela a konce fronty fronta má pevnou délku a je implementována jako kruhová indexy se zvyšují modulo délka pole je nutné implementovat ještě dotaz, zda je fronta plná a prázdná
25 Fronta délky n = celo: 0 konec: 0 prázdná plná
26 Fronta délky n = vloz(3) celo: 0 konec: 0 prázdná plná
27 Fronta délky n = celo: konec: 0 1 vloz(3) prázdná plná
28 Fronta délky n = celo: konec: 0 1 vloz(3) vloz(5) prázdná plná
29 Fronta délky n = celo: konec: 0 2 vloz(3) vloz(5) prázdná plná
30 Fronta délky n = celo: konec: 0 2 prázdná plná vloz(3) vloz(5) vyjmi() vrátí hodnotu z čela fronty - 3
31 Fronta délky n = celo: konec: 1 2 prázdná plná vloz(3) vloz(5) vyjmi() vrátí hodnotu z čela fronty - 3
32 Fronta délky n = celo: konec: 1 2 prázdná plná vloz(3) vloz(5) vyjmi() vrátí hodnotu z čela fronty - 3 vloz(8)
33 Fronta délky n = celo: konec: 1 0 prázdná plná vloz(3) vloz(5) vyjmi() vrátí hodnotu z čela fronty - 3 vloz(8) vloz(10)
34 Fronta délky n = celo: konec: 1 1 prázdná plná vloz(3) vloz(5) vyjmi() vrátí hodnotu z čela fronty - 3 vloz(8) vloz(10)
35 index celo ukazuje na prvek pole na čele fronty, který bude odebrán index konec ukazuje na prvek v poli, kam se zapíše nový prvek pokud se indexy celo a konec rovnají, je fronta buď plná nebo prázdná podle rovnosti indexů není možné rozlišit stav fronty musím tedy tyto stavy uchovávat zvlášť pravidlo: pokud se po přidání prvku indexy rovnají, je fronta plná (obdobně: prázdná)
36 Příklad - kruhová fronta pevné class TFronta { délky int delka,celo,konec; bool plna,prazdna; int *fronta; public: bool je_prazdna(); bool je_plna(); bool vloz(int prvek); int vyber(); TFronta(); TFronta(int velikost); ~TFronta(); destruktor };
37 TFronta::TFronta() { delka = 50; celo = konec = 0; plna = false; prazdna = true; fronta = new int[50]; } TFronta::TFronta(int velikost) { delka = velikost; celo = konec = 0; plna = false; prazdna = true; fronta = new int[velikost]; }
38 bool TFronta::je_prazdna() { return prazdna; } bool TFronta::je_plna() { return plna; }
39 bool TFronta::vloz(int prvek) { prazdna = false; if (plna) return false; fronta[konec] = prvek; konec = (konec+1)%delka; if (konec == celo) plna = true; return true; }
40 int TFronta::vyber() { plna = false; if (prazdna) return -1; int prvek = fronta[celo]; celo=(celo+1)%delka; if (celo==konec) prazdna = true; return prvek; } TFronta::~TFronta() { delete [] fronta; }
41 Poznámky: spoléhat se na návratovou hodnotu -1 metody vyber(), která signalizuje pokus o výběr z prázdné fronty, není vhodné nepoznám, zda byla vyjmuta -1 nebo bylo vybíráno z prázdné fronty možné řešení: např. nastavovat chybovou proměnnou poznáme i lepší možnost než chybová proměnná
42 Odstranění problému spočívá: ve správném používání knihovních funkcí před každým voláním funkce vyjmi() aplikace otestuje, zda není fronta prázdná např. while (!f.je_prazdna()) v používání výjimek rys objektových jazyků, který poznáme později
43 void main() { int x; TFronta f1; f1.vloz(10); f1.vloz(-3); x = f1.vyber(); if (f1.je_prazdna()) cout << "Prazdna"; else cout << "Jeste tam neco je!"; }; zde je vyvolán destruktor
44 void main() { int x; TFronta *f1; f1 = new TFronta(100); f1 -> vloz(10); f1 -> vloz(-3); x = f1 -> vyber(); if (f1->je_prazdna()) cout << "Prazdna"; else cout << "Jeste tam neco je!"; delete f1; }; zde je vyvolán destruktor
45 Úkol Vytvořte třídu, implementující zásobník znaků konečné velikosti. Navrhněte vhodné metody a konstruktory. Délku specifikujte jako parametr konstruktoru (implicitní konstruktor vytvoří zásobník o velikosti 80). Zásobník otestujte v programu, který přečte znaky z klávesnice do konce řádku (znak po znaku) a vypíše je v opačném pořadí.
46 Zásobník (Stack) datová struktura typu LIFO Last In - First Out nejprve se vybírá prvek, který byl vložen na vrchol (top) zásobníku jako poslední operace: PUSH (uložení hodnoty na vrchol zásobníku) POP (odebrání hodnoty z vrcholu zásobníku)
47 někdy bývá implementována také operace TOP zjištění hodnoty na vrcholu zásobníku bez odebrání prvku POP PUSH vrchol
48 Možné implementace na principu spojového seznamu neomezená velikost zásobníku (omezená pouze velikostí dostupné paměti) operace vložení prvku znamená vložení prvku na konec seznamu operace výběr prvku je výběr z konce seznamu zásobník je reprezentován ukazatelem na vrchol prvek seznamu nese hodnotu a ukazatel na předchozí prvek v zásobníku polem (pevné nebo proměnné délky) kruhová implementace není potřebná stačí index na vrchol
49 Zásobník pomocí pole dvě varianty implementace vrchol obsahuje index uloženého posledního prvku při vložení nového prvku nejprve zvednu index a zapíši nový, při výběru vezmu prvek na tomto indexu a pak snížím index vrcholu; počáteční hodnota indexu vrcholu je -1 vrchol obsahuje index, kam mám vložit nový prvek při vložení nového prvku zapíši prvek do pole na vrchol a následně jej zvednu o 1; při výběru nejprve snížím index o 1 a vrátím prvek; počáteční hodnota vrcholu je 0
50 Zásobník délky n = 3 (varianta 1) vrchol: -1 prázdný plný
51 Zásobník délky n = 3 (varianta 1) push(3) vrchol: -1 prázdný plný
52 Zásobník délky n = 3 (varianta 1) push(3) vrchol: 0 prázdný plný
53 Zásobník délky n = 3 (varianta 1) push(3) 3 vrchol: 0 prázdný plný
54 Zásobník délky n = 3 (varianta 1) push(3) push(8) 3 vrchol: 0 prázdný plný
55 Zásobník délky n = 3 (varianta 1) push(3) push(8) 3 vrchol: 1 prázdný plný
56 Zásobník délky n = 3 (varianta 1) vrchol: 1 prázdný push(3) push(8) plný
57 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() vrchol: 1 prázdný plný vrátí hodnotu z vrcholu, tj. 8, ale neodebere ji
58 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() vrchol: 1 prázdný plný vrátí hodnotu z vrcholu, tj. 8, a odebere ji
59 Zásobník délky n = 3 (varianta 1) vrchol: 0 prázdný push(3) push(8) top() pop() plný
60 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) 3 8 vrchol: 0 prázdný plný
61 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) 3 8 vrchol: 1 prázdný plný
62 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) 3 10 vrchol: 1 prázdný plný
63 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) 3 10 push(13) vrchol: 1 prázdný plný
64 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) 3 10 push(13) vrchol: 2 prázdný plný
65 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) push(13) vrchol: 2 prázdný plný
66 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) push(13) pop() vrchol: 2 prázdný plný vrátí hodnotu 13 a odebere ji
67 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) push(13) pop() vrchol: 1 prázdný plný vrátí hodnotu 13 a odebere ji
68 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) push(13) pop() pop() vrchol: 1 prázdný plný vrátí hodnotu 13 a odebere ji vrátí hodnotu 10 a odebere ji
69 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) push(13) pop() pop() vrchol: 0 prázdný plný vrátí hodnotu 13 a odebere ji vrátí hodnotu 10 a odebere ji
70 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) push(13) pop() pop() pop() vrchol: 0 prázdný plný vrátí hodnotu 13 a odebere ji vrátí hodnotu 10 a odebere ji vrátí hodnotu 3 a odebere ji
71 Zásobník délky n = 3 (varianta 1) push(3) push(8) top() pop() push(10) push(13) pop() pop() pop() vrchol: -1 prázdný plný vrátí hodnotu 13 a odebere ji vrátí hodnotu 10 a odebere ji vrátí hodnotu 3 a odebere ji
72 Domácí úkol č. 1 Implementujte frontu s neomezenou délkou. Implementaci proveďte na principu spojového seznamu.
73 celo konec NULL
74 celo konec NULL vloz(3)
75 3 celo konec vloz(3)
76 3 celo konec vloz(3) vloz(5)
77 3 5 celo konec vloz(3) vloz(5)
78 3 5 celo konec vloz(3) vloz(5) vloz(10)
79 celo konec vloz(3) vloz(5) vloz(10)
80 celo konec vloz(3) vloz(5) vloz(10) vyjmi() vrátí hodnotu z čela fronty - 3
81 5 10 celo konec vloz(3) vloz(5) vloz(10) vyjmi() vrátí hodnotu z čela fronty - 3
82 5 10 celo konec vloz(3) vloz(5) vloz(10) vyjmi() vrátí hodnotu z čela fronty - 3 vloz(8)
83 celo konec vloz(3) vloz(5) vloz(10) vyjmi() vrátí hodnotu z čela fronty - 3 vloz(8)
84 Návod: class TFronta { class TPolozka { int prvek; TPolozka *dalsi; TPolozka(int novy_prvek); } TPolozka *celo, *konec; public: int je_prazdna(); atd. }
85 Poznámka: konstruktor vložené třídy TPolozka implementujeme: TFronta::TPolozka::TPolozka(int novy_prvek) { prvek = novy_prvek; dalsi = NULL; }
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
Programování v C++ 2, 4. cvičení
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
Datové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
Objektově orientované programování. Úvod
Objektově orientované programování Úvod Imperativní programovací styl klasický programovací styl používaný v době vzniku prvních vyšších programovacích jazyků těžiště programování je v tvorbě algoritmů
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Mělká a hluboká kopie
Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
ADT/ADS = abstraktní datové typy / struktury
DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní
Programování II. Návrh programu I 2018/19
Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
Kolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
Programování v C++ 3, 3. cvičení
Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
konstruktory a destruktory (o)
konstruktory a destruktory (o) - slouží k ovlivnění vzniku (inicializace) a zániku (úklid) objektu - základní myšlenkou je, že proměnná by měla být inicializována (nastavena do počátečního stavu) a zároveň
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20
Dynamické datové struktury I.
Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
Abstraktní datové typy FRONTA
Abstraktní datové typy FRONTA Fronta je lineární datová struktura tzn., že ke každému prvku s výjimkou posledního náleží jeden následník a ke každému prvku s výjimkou prvního náleží jeden předchůdce. Do
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
ABSTRAKTNÍ DATOVÉ TYPY (ADT)
ABSTRAKTNÍ DATOVÉ TYPY (ADT) hierarchie abstrakcí: nejvyšší úroveň ZOO DruhZvirat celá čísla, řetězce nejnižší úroveň bity Abstrahujeme od - reprezentace (implementace) dat - realizace (implementace) operací
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
Šablony, kontejnery a iterátory
7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by
Základní datové struktury
Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013
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.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Jazyk C++ I. Šablony 2
Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()
Programování v C++ 2, 7. cvičení
Programování v C++ 2, 7. cvičení spojový seznam 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky Dědění
Abstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
Programování v C++ 2, 8. cvičení
Programování v C++ 2, 8. cvičení návrhový vzor iterátor 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky
Lineární datové struktury
Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Lineární datové
IB111 Programování a algoritmizace. Objektově orientované programování (OOP)
IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Základy C++ I. Jan Hnilica Počítačové modelování 18
Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program
C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19
C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,
Spojová implementace lineárních datových struktur
Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB
1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:
Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.
TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);
TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
Šablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
Programování v C++ 1, 6. cvičení
Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
Vector datový kontejner v C++.
Vector datový kontejner v C++. Jedná se o datový kontejner z knihovny STL jazyka C++. Vektor je šablona jednorozměrného pole. Na rozdíl od "klasického" pole má vector, mnoho užitečných vlastností a služeb.
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
16. února 2015, Brno Připravil: David Procházka. Konstruktory a destruktory
16. února 2015, Brno Připravil: David Procházka Konstruktory a destruktory Základy objektového návrhu Jak navrhovat použitelné třídy Strana 2 / 26 Obsah přednášky 1 Jak navrhovat použitelné třídy 2 Jak
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze
Dynamika objektů Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad Karel Richta, Martin Hořeňovský, Aleš Hrabalík,
Základy objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
Jazyk C# (seminář 6)
Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí
Chování konstruktorů a destruktorů při dědění
Dědičnost V objektově orientovaném programování je dědičnost způsob, jak vytvořit novou třídu použitím již existujících definic jiných tříd. Takto vytvořené třídy přebírají vlastnosti a metody svého předka
Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
Programování v C++ VI
Programování v C++ VI Konstruktory, destruktory a dědičnost Konstruktory a dědičnost I když jsme se bavili o dědičnosti, trochu jsme zapomněli na konstruktory to se ale nevyplácí, vzpomeňte si, jak důležitý
Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4
Fronta (Queue) Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Fronta uplatňuje mechanismus přístupu FIFO first
24. listopadu 2013, Brno Připravil: David Procházka
24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
Mnohotvarost (polymorfizmus)
Mnohotvarost (polymorfizmus) TYPY MNOHOTVAROSTI... 2 PŘETĚŽOVÁNÍ METOD, PŘETĚŽOVÁNÍ OPERACÍ... 3 PŘETÍŽENÍ OPERÁTORŮ... 4 ČASTO PŘETĚŽOVANÉ OPERÁTORY... 4 PŘEPISOVÁNÍ... 7 VIRTUÁLNÍ METODY... 10 SEZNAM
Martin Flusser. December 15, 2016
ZPRO cvičení 9 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 15, 2016 Outline I 1 Outline 2 Struktura 3 Struktury cv 4 Lineární spojový
Lineární datové struktury
Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 5. března 2019 Jiří Dvorský (VŠB TUO) Lineární datové
Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;
Iterátory v C++. Iterátor v C++ je vlastně taková obdoba ukazatelů pro kontejnery. Dříve, než se dostaneme k bližšímu vysvětlení pojmu iterátor, ukážeme si jednoduchý příklad, jak pracovat s obyčejným
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Dynamická alokace Kopírovací konstruktor Přetypování v C++ Nikola Beneš 12. října 2015 PB161 přednáška 4: dynamická alokace, kopírovací konstruktor, casting
Funkční objekty v C++.
Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční
Jazyk C++, některá rozšíření oproti C
Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra
Operační systémy. Cvičení 4: Programování v C pod Unixem
Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné
Programování v jazyce C a C++
Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu
Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem
Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat
ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky
LG 04 Zásobník Fronta Operace nqueue, equeue, Front, mpty... yklická implementace fronty Průchod stromem do šířky Grafy průchod grafem do šířky průchod grafem do hloubky Ořezávání a heuristiky 1 Zásobník
IUJCE 07/08 Přednáška č. 6
Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak
Lineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března
Dědičnost Cíle lekce Cílem lekce je naučit se pracovat a využívat dědičnosti při návrhu a tvorbě programů. Lekce je zaměřena hlavně na jednoduchou dědičnost. Bude rovněž vysvětlen rozdíl mezi dědičností
Dynamická identifikace typů v C++.
Dynamická identifikace typů v C++. Pod pojmem "Dynamická identifikace typů" rozumíme zjišťování typů proměnných, nebo objektů v době běhu programu. Identifikaci typů zajišťuje operátor typeid. Než se ale
Programování v jazyce C a C++
Programování v jazyce C a C++ Příklad na tvorbu třídy Richter 1 4. prosince 2017 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno Dvourozměrné pole pomocí tříd Zadání Navrhněte a napište třídu pro realizace
ZPRO v "C" Ing. Vít Hanousek. verze 0.3
verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout
Zadání k 2. programovacímu testu
Zadání k 2. programovacímu testu Úvod do programovacích jazyků (Java) 4.12.2008 00:08 Michal Krátký Katedra informatiky Technická univerzita Ostrava Historie změn, příklady: 21 Poznámka: Pokud není řečeno
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
7. Datové typy v Javě
7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů
Seminář Java II p.1/43
Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii
1. Programování proti rozhraní
1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní
IRAE 07/08 Přednáška č. 7. Začátek (head)
Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Projekt Obrázek strana 135
Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy
Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Dědičnost tříd Dědičnost umožňuje vytvářet nové třídy z tříd existujících tak, že odvozené třídy (tzv. potomci) dědí vlastnosti
IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada
IB015 Neimperativní programování Časová složitost, Typové třídy, Moduly Jiří Barnat Libor Škarvada Sekce IB015 Neimperativní programování 07 str. 2/37 Časová složitost Časová složitost algoritmu IB015
Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu. 6.1.1 Obědvající filosofové
Operační systémy Tomáš Hudec 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu, 6.1.1 Obědvající filosofové, 6.1.2 Producenti a konzumenti, 6.1.3 Problém spících holičů, 6.1.4 Problém pisatelů
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Standardní algoritmy vyhledávací.
Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární
Programování v C++ 1, 1. cvičení
Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých
Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března
Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.