C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Rozměr: px
Začít zobrazení ze stránky:

Download "C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19"

Transkript

1 C++ přetěžování funkcí a operátorů 1

2 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ů, případně obojím (nestačí odlišení typem návratové hodnoty) // funkce pro výpis pole proměnných int void VypisPole(int pole[], int pocetprvku) for (int i = 0; i < pocetprvku; i++) cout << pole[i] << ' '; cout << endl; ; // další funkce pro výpis polí jiných typů pojmenujeme stejně void VypisPole(double pole[], int pocetprvku); void VypisPole(float pole[], int pocetprvku); void VypisPole(long pole[], int pocetprvku); nemusíme vymýšlet pro každý datový typ jiný název funkce, která vypíše pole pro všechny typy máme stejně pojmenovanou funkci VypisPole kompilátor podle seznamu parametrů pozná, kterou má zavolat 2

3 Přetěžování členských funkcí třídy příklad: třída obdélník má (kromě přístupových funkcí) metodu Nakresli class obdelnik public: // pristupové funkce int VratVysku() const; void NastavVysku(int v); int VratSirku() const; void NastavSirku(int s); // ostatní funkce void Nakresli() const; private: int vyska, sirka; ; funkce Nakresli vykreslí na monitor obdélník z hvězdiček: void obdelnik::nakresli() const for (int i = 0; i < vyska; i++) for (int j = 0; j < sirka; j++) std::cout << '*'; std::cout << std::endl; pokud chceme, aby se obdélník uměl nakreslit i pomocí jiného znaku než '*', přetížíme funkci Nakresli, tj. vytvoříme ještě jednu její variantu, která bude přebírat jako parametr znak, jenž má být při kreslení použit 3

4 Přetěžování členských funkcí třídy class obdelnik public: // pristupové funkce int VratVysku() const; void NastavVysku(int v); int VratSirku() const; void NastavSirku(int s); // ostatní funkce void Nakresli() const; void Nakresli(char z) const; private: int vyska, sirka; ; void obdelnik::nakresli() const Nakresli('*'); void obdelnik::nakresli(char z) const for (int i = 0; i < vyska; i++) for (int j = 0; j < sirka; j++) std::cout << z; std::cout << std::endl; třída má teď dvě funkce Nakresli, první (bez parametrů) kreslí obdélník z hvězdiček, druhá použije ke kreslení znak předaný jako parametr v definici funkce bez parametrů je pouze zavolána varianta s parametrem, které je předán defaultní znak hvězdičky to proto, abychom neopakovali stejný kód ve více funkcích i když bychom mohli funkci Nakresli() vypsat celou (kompilátoru by to nevadilo), je zvykem vyvarovat se opakování stejného kódu 4

5 Přetěžování členských funkcí třídy použití obdélníka a jeho přetížených funkcí: int main() using namespace std; obdelnik O; O.NastavVysku(5); O.NastavSirku(10); cout << "vyska: " << O.VratVysku() << endl; cout << "sirka: " << O.VratSirku() << endl; cout << endl; O.Nakresli(); cout << endl; O.Nakresli('#'); return 0; 5

6 Přetěžování konstruktorů třídy konstruktor lze přetížit stejně jako kteroukoliv jinou metodu, jedná se o silnou vlastnost C++ Pravidla: 1. pokud nenapíšeme ke třídě žádný konstruktor, kompilátor poskytne konstruktor bez parametrů (tzv. výchozí), který ale s datovými položkami třídy nic nedělá 2. pokud napíšeme jakýkoliv konstruktor, kompilátor neposkytne žádný chceme-li, abychom mohli ihned při vytvoření nastavit výšku a šířku obdélníka, napíšeme konstruktor přebírající jako parametry dvě celá čísla: // deklarace konstruktoru obdelnik(int v, int s); // definice konstruktoru obdelnik::obdelnik(int v, int s) vyska = v; sirka = s; použití konstruktoru v programu: obdelnik O(5, 10); O.Nakresli(); 6

7 Přetěžování konstruktorů třídy protože jsme ale napsali vlastní konstruktor, kompilátor neposkytl žádný, není tedy možné napsat obdelnik O; protože třída aktuálně nemá žádný výchozí konstruktor výchozí konstruktory jsou potřeba pokud např. chceme vytvořit pole objektů: obdelnik pole[10]; pokud není k dispozici výchozí konstruktor, tento příkaz povede k chybě v době kompilace pokud už tedy máme napsaný nějaký konstruktor, musíme výchozí konstruktor doplnit sami // deklarace konstruktorů obdelnik(); obdelnik(int v, int s); // defince konstruktorů obdelnik::obdelnik() obdelnik::obdelnik(int v, int s) vyska = v; sirka = s; Třída má teď dva přetížené konstruktory. Výchozí konstruktor sice nic nedělá, ale i to stačí k tomu abychom mohli vytvořit - pole obdélníků obdelnik[10]; - obdélník bez parametrů obdelnik O; Bylo by však samozřejmě možné do těla výchozího konstruktoru doplnit kód sloužící k nastavení nějakých úvodních hodnot datových členů: obdelnik::obdelnik() vyska = sirka = 1; 7

8 Kopírovací konstruktor konstruktor, který si jako parametr bere odkaz na objekt dané třídy a má za úkol vytvořit jeho kopii (tzn. nastavit datové členy nového objektu podle předaného vzoru) // deklarace obdelnik(const obdelnik & vzor); // definice obdelnik::obdelnik(const obdelnik & vzor) vyska = vzor.vratvysku(); sirka = vzor.vratsirku(); v programu použijeme kopírovací konstruktor takto: Parametr vzor předaný odkazem se obvykle deklaruje jako konstantní, protože kopírovací konstruktor nemění jeho data. kopírovací knstruktor nastaví členská data podle předloženého vzoru obdelnik O(7, 4); // vytvoření nějakého obdélníka obdelnik P(O); // vytvoření jeho kopie - P má šířku a výšku stejnou jako O Kopírovací konstruktor je ke třídě automaticky poskytnut kompilátorem. Pokud třída nealokuje data na haldě, poskytnutý kopírovací konstruktor funguje správně a není potřeba psát vlastní. 8

9 Kopírovací konstruktor pro třídu alokující paměť na haldě následující třída čtverec má svou datovou položku strana alokovanou na haldě a udržuje si na ni pointer class ctverec public: // konstruktor, destruktor ctverec(int s); ~ctverec(); // pristupove funkce int VratStranu() const return *strana; void NastavStranu(int s) *strana = s; private: int *strana; ; // definice konstruktoru ctverec::ctverec(int s) strana = new int; *strana = s; Co se stane, když pro objekt této třídy použijeme vestavěný kopírovací konstruktor? 9

10 Kopírovací konstruktor pro třídu alokující paměť na haldě pokud použijeme vestavěný kopírovací konstruktor, dojde k přesnému nakopírování hodnoty proměnné strana (tedy paměťové adresy), oba čtverce (vzor i kopie) budou ukazovat na tutéž adresu v paměti ctverec C(5); // vytvoření čtverce ctverec Kopie(C); // vytvoření kopie ctverec C strana 5 ctverec Kopie strana pokud jednomu ze čtverců změníme hodnotu strany, změníme ji oběma pokud bude jeden z čtverců smazán, druhý bude ukazovat na neplatnou adresu aby k tomu nedošlo, je potřeba napsat vlastní kopírovací konstruktor, který pro nově vytvářený objekt alokuje paměť a zkopíruje do ní hodnotu datové položky vzoru // kopírovací konstruktor ctverec::ctverec(const ctverec & vzor) strana = new int; *strana = vzor.vratstranu(); ctverec Kopie(C); // vytvoření kopie ctverec C strana 5 5 ctverec Kopie strana 10

11 Přetížení operátorů vestavěné operátory (+, -, *...), které pracují se základními datovými typy (int, double...) lze přetížit tak, aby pracovaly i s nově vytvořenými typy třídami přetížené operátory mohou být a) běžnými funkcemi funkce má přesně tolik parametrů, kolik má operátor operandů operátor sčítání (+) bude mít dva parametry, operátor inkrementace (++) jeden b) metodami třídy operátory jako členské funkce mají v seznamu parametrů o jeden operand méně než by měly mít, protože jedním z operandů je automaticky ten objekt, jehož funkce je volána unární operátory (např. ++) jsou jako členské funkce bez parametrů (pracují na objektu samém) binární operátory (+, ==...) mají jeden parametr - objekt na pravé straně operátoru (levou stranou je objekt, jehož funkce byla volána) k přetěžování operátorů slouží klíčové slovo operator, za který píšeme daný operátor funkce, přetěžující operátor + se deklaruje takto: návratový typ operator+(seznam parametrů) 11

12 Přetížení operátorů k demonstraci principů přetěžování operátorů použijeme třídu cislo, která jako svoji jedinou datovou položku uchovává celočíselnou hodnotu (reálný smysl by měla např. třída matice...) // deklarace třídy class cislo public: cislo(int h); int VratHodnotu() const return hodnota; void NastavHodnotu(int h) hodnota = h; private: int hodnota; ; // definice konstruktoru cislo::cislo(int h) hodnota = h; 12

13 Operátory jako běžné funkce Binární oprátor: sčítání // deklarace přetíženého operátoru + cislo operator+(cislo a, cislo b); // definice cislo operator+(cislo a, cislo b) cislo c(a.vrathodnotu() + b.vrathodnotu()); return c; funkce, přetěžující operátor, má název složený z klíčového slova operator, za kterým následuje typ operátoru (v tomto případě +), následují závorky se seznamem parametrů (dva objekty typu cislo, které bude sčítat) návratovou hodnotou je objekt typu cislo (aby bylo možné výsledek sčítání přiřadit jinému objektu cislo) v těle funkce se vytvoří objekt typu cislo, kterému se nastaví hodnota rovná součtu hodnot operandů, tento objekt je funkcí vrácen cislo a(7), b(5), c(0); c = a + b; // použití přetíženého operátoru cout << hodnota c je << c.vrathodnotu(); 13

14 Operátory jako běžné funkce všimněme si, že přetížený operátor + nijak nemění hodnoty operandů (parametrů), pouze tyto hodnoty použije k nastavení hodnoty výsledku je tedy rozumné předávat operandy do funkce jako odkazy, funkce si nebude pořizovat jejich lokální kopie, ale bude pracovat přímo s předanými proměnnými pro jistotu deklarujeme operandy jako konstantní odkazy, budeme tak mít jistotu (ohlídanou kompilátorem), že se předané objekty skutečně nezmění // deklarace přetížení operátoru + cislo operator+(const cislo & a, const cislo & b); // definice cislo operator+(const cislo & a, const cislo & b) cislo c(a.vrathodnotu() + b.vrathodnotu()); return c; Obecně platí, že pokud funkce nemění předané parametry, je výhodné tyto parametry předávat jako (konstantní) odkazy. Nedochází tak ke zbytečnému pořizování lokálních kopií. 14

15 Operátory jako běžné funkce Unární oprátor: mínus chceme, aby mezi objekty cislo bylo možné používat unární mínus, tedy aby bylo možné napsat a = -b; musíme přetížit unární operátor - // deklarace cislo operator-(const cislo & a); // definice cislo operator-(const cislo & a) cislo b(-a.vrathodnotu()); return b; Parametr (operand) je opět předáván jako konstantní odkaz, funkce nemění jeho hodnoty. pozn. dočasný objekt b, který je ve funkci vytvořen, není nutné pojmenovávat: cislo operator-(const cislo & a) return cislo(-a.vrathodnotu()); 15

16 Operátory jako běžné funkce Unární operátor: inkrementace operátor inkrementace má dvě formy 1. prefixovou ++x (zvyšuje hodnotu x o jedničku, vrací zvýšenou hodnotu) 2. postfixovou x++ (zvyšuje hodnotu x o jedničku, ale vrací původní hodnotu) Přetížení prefixové varianty cislo operator++(cislo & a) a.nastavhodnotu(a.vrathodnotu() + 1); return a; operand je do funkce předáván jako odkaz, ale tentokrát není konstantní, protože funkce bude měnit jeho hodnotu (zvyšovat ji o jedničku) cislo a(7), b(2); b = ++a; cout << "hodnota a je " << a.vrathodnotu() << endl; cout << "hodnota b je " << b.vrathodnotu() << endl; 16

17 Operátory jako běžné funkce návratová hodnota operátoru je objekt typu cislo, aby bylo možné výsledek práce operátoru přiřadit jinému objektu, tzn. aby šlo napsat b = ++a; vracený objekt se z funkce operator++ vrací hodnotou, tzn. při návratu se vytvoří jeho kopie, která je posléze přiřazena do objektu vlevo od operátoru = je tedy zbytečně volán kopírovací konstruktor, v tomto případě je účelnější předávat objekt z funkce odkazem: cislo & operator++(cislo & a) a.nastavhodnotu(a.vrathodnotu() + 1); return a; Nyní se už nepořizuje kopie vraceného objektu, vracen je přímo objekt předaný funkci jako parametr. Ten také figuruje jako pravá strana operátoru =, pokud je inkrementace spojena s přiřazením jako v případě příkazu b = ++a; 17

18 Operátory jako běžné funkce Přetížení postfixové varianty inkrementace aby kompilátor rozeznal o kterou variantu jde, platí úmluva, že u přetěžování postfixové varianty je funkci jako parametr navíc předáno celé číslo tento parametr bude ve funkci ignorován, jedná se jen o příznak toho, že přetěžujeme postfix cislo operator++(cislo & a, int priznak) cislo pomocne(a.vrathodnotu()); a.nastavhodnotu(a.vrathodnotu() + 1); return pomocne; Funkce nejdříve vytvoří pomocný objekt cislo se stejnou hodnotou jako předaný parametr. Potom zvýší hodnotu parametru a nakonec vrátí objekt s původní hodnotou. parametr priznak se ve funkci nepoužívá, nepoužívá se ani při aplikaci operátoru v programu: cislo a(7), b(2); b = a++; cout << endl; cout << " hodnota a je " << a.vrathodnotu() << endl; cout << " hodnota b je " << b.vrathodnotu() << endl; 18

19 Operátory jako běžné funkce návratovou hodnotou je opět objekt typu cislo, který ale v tomto případě musí být vracen hodnotou (s pomocí kopie) a nikoliv odkazem důvody: postfixový operátor musí změnit hodnotu parametru, ale vrací původní hodnotu (před změnou) je tedy potřeba vytvořit dočasný objekt pro uchování původní hodnoty a ten vrátit, což se musí provést hodnotou, protože dočasný objekt se po skončení funkce opustí svůj obor platnosti (předávali bychom odkaz na již neexistující objekt) 19

20 Pointer this každá funkce třídy má k dispozici zvláštní pointer, který obsahuje adresu objektu, se kterým funkce aktuálně pracuje, tento pointer se nazývá this následující funkce ověřuje, že pointer vždy ukazuje na aktuální objekt // členská funkce třídy cislo, ověřující hodnotu pointeru this const cislo * HodnotaThis() return this; použití funkce demonstruje, že this vždy obsahuje adresu aktuálního objektu: cislo a(7); cout << cislo a << endl; cout << adresa: << &a << endl; cout << this: << a.hodnotathis() << endl; cislo b(4); cout << cislo b << endl; cout << adresa: << &b << endl; cout << this: << b.hodnotathis() << endl; pointer this je možné využít při přetěžování operátorů (viz dále) 20

21 Přetížené operátory jako členské funkce Operátor inkrementace jako členská funkce // deklarace (v deklaraci třídy) cislo & operator++(); // definice cislo & cislo::operator++() ++hodnota; return *this; funkce přetěžující prefixovou variantu ++ využívá pointeru this k tomu, aby vrátila odkaz na objekt se zvýšenou hodnotou (funkce tedy vrací ten objekt, se kterým zrovna pracuje) 21

22 Přetížené operátory jako členské funkce Operátor sčítání jako členská funkce // deklarace (v deklaraci třídy) cislo operator+(const cislo & pravastrana); // definice cislo cislo::operator+(const cislo & pravastrana) return cislo(hodnota + pravastrana.vrathodnotu()); // použití v programu cislo a(7), b(2), c(0); c = a + b; // hodnota c je teď 9 Pozn. protože operátor + je teď členskou funkcí třídy, šel by zavolat i takto: c = a.operator+(b); 22

23 Přetížené operátory jako členské funkce Operátor porovnání jako členská funkce // deklarace (v deklaraci třídy) bool operator==(const cislo & pravastrana) const; // definice bool cislo::operator==(const cislo & pravastrana)const return (hodnota == pravastrana.vrathodnotu()); funkce vrací hodnotu typu bool, která informuje o tom, zda se objekty rovnají cislo a(7), b(4); if (a == b) // použití operátoru ==... pokud bychom chtěli používat operátor!=, museli bychom ho přetížit také (z přetížení == neplyne možnost automaticky použít doplňkový!=) 23

24 Přetížení operátoru přiřazení operátor přiřazení je ke třídě automaticky poskytován kompilátorem, můžete tedy provádět přiřazení mezi jednotlivými objekty třídy cislo a(5), b(7); a = b; cout << "hodnota a je " << a.vrathodnotu(); kompilátorem poskytnutý operátor přiřazuje hodnoty datových členů pravého objektu do datových členů levého objektu (jak by se dalo čekat) problém nastane, pokud třída uchovává pointer na data na haldě, potom při použití vestavěného operátoru dojde ke zkopírování adresy a oba objekty ukazují do stejného místa (stejná situace jako u kopírovacího konstruktoru) cislo a hodnota cislo b hodnota a = b; cislo a hodnota cislo b hodnota v tomto případě je nutné napsat vlastní operátor 24

25 Přetížení operátoru přiřazení přetížený operátor = pak může vypadat např. takto: cislo & cislo::operator=(const cislo & pravastrana) *hodnota = pravastrana.vrathodnotu(); return *this; cislo a hodnota cislo b hodnota a = b; cislo a hodnota cislo b hodnota funkce vrací objekt cislo, aby bylo možné napsat a = b = c; objekt je vracen odkazem, aby nedocházelo ke zbytečnému volání kopírovacího konstruktoru k vracení odkazem je použit pointer this 25

26 Poznámky k přetěžování operátorů Omezení kladená na přetěžování operátorů není možné vytvářet nové operátory není možné měnit aritu operátorů (tzn. jestli je operátor unární či binární) přetěžováním nelze změnit prioritu operátorů nelze přetížit operátory pro standardní datové typy (např. int, double...) operátory = (přiřazení), -> (nepřímý přístup přes pointer), [] (index), () (volání funkce) musí být metodami třídy 26

27 Konverze mezi objekty třídy a jinými datovými typy v praxi může být užitečné moci konvertovat proměnnou nějakého typu (ať už defaultního nebo objektu jiné třídy) na objekt naší třídy, případně moci provést konverzi opačnou Konverze jiný typ objekt naší třídy provádíme pomocí konstruktoru, který jako parametr přebírá proměnnou daného typu a vytvoří objekt naší třídy chceme-li umět konvertovat celočíselnou hodnotu na objekt cislo, potřebujeme konstruktor přebírající celočíselnou hodnotu: cislo(int a); s pomocí tohoto můžeme jednak vytvořit objekt: cislo a(7), ale umožní nám i toto: int x = 10; // proměnná typu int cislo c; // objekt cislo (zde např. pomocí výchozího konstruktoru) c = x; // konverze integeru x na objekt cislo Co se děje na třetím řádku? Na pravé straně operátoru = se vytvoří dočasný objekt cislo (pomocí konstruktoru přebírajícího celé číslo), tento dočasný objekt je pak přiřazen objektu c stejným způsobem lze konvertovat objekty jiných tříd na objekt cislo, vždy je nutné mít napsaný konstruktor, přebírající objekt dané třídy 27

28 Konverze mezi objekty třídy a jinými datovými typy Konverze objekt naší třídy jiný typ provádíme pomocí operátoru konverze deklarace operátoru konverze vypadá takto operator typ(); operátor konverze nemá návratovou hodnotu, ale ve skutečnosti vždy vrací deklarovaný typ konverze objektu cislo na int se provede takto // deklarace operator int(); // definice cislo::operator int() return hodnota; použití v programu cislo a(7); // objekt typu cislo int x = a; // konverze objektu cislo na int stejným způsobem lze konvergovat objekt cislo na objekt jiné třídy 28

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

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

Více

Základy C++ I. Jan Hnilica Počítačové modelování 18

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

Více

Mělká a hluboká kopie

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

Více

Více o konstruktorech a destruktorech

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í

Více

Jazyk C++ I. Polymorfismus

Jazyk C++ I. Polymorfismus Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?

Více

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

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 - operátor je speciální

Více

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++ 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

Více

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

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

Více

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

Přetěžování operátorů Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat

Více

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

Přetěžování operátorů Karel Müller, Josef Vogel (ČVUT FIT) Přetěžování operátorů BI-PA2, 2011, Přednáška 4 1/31 Přetěžování operátorů Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více

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

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

Více

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

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

Více

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

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory 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,

Více

Pointery II. Jan Hnilica Počítačové modelování 17

Pointery II. Jan Hnilica Počítačové modelování 17 Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky

Více

Vector datový kontejner v C++.

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.

Více

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

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

Více

Funkční objekty v C++.

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í

Více

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++ 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

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Projekt Obrázek strana 135

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

Více

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

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

Více

C++ objektově orientovaná nadstavba programovacího jazyka C

C++ objektově orientovaná nadstavba programovacího jazyka C C++ objektově orientovaná nadstavba programovacího jazyka C (1. část) Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 5. května 2014 České vysoké učení technické v

Více

Programování v C++ VI

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ý

Více

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; } Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný

Více

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

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é

Více

Úvod do programovacích jazyků (Java)

Ú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

Více

Mnohotvarost (polymorfizmus)

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

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

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

PROGRAMOVÁNÍ V C++ CVIČENÍ PROGRAMOVÁNÍ V C++ CVIČENÍ INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com PODMÍNKY ZÁPOČTU Základní podmínky společné

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016 ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

Přetěžování operátorů, dynamika objektů 2

Přetěžování operátorů, dynamika objektů 2 Přetěžování operátorů, dynamika objektů 2 Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Programování v C++, A7B36PJC 03/2016, Lekce 6 https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start

Více

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

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

Více

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Standardní algoritmy vyhledávací.

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í

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016 ZPRO cvičení 8 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 7, 2016 Outline I 1 Outline 2 Dynamické alokování paměti 3 Dynamická alokace

Více

Jazyk C++ II. Šablony a implementace

Jazyk C++ II. Šablony a implementace Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy

Více

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

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

Více

Př. další použití pointerů

Př. další použití pointerů Př. další použití pointerů char *p_ch; int *p_i; p_ch = (char *) p_i; // konverze int * na char * 8 int i = 5; int *p_i; p_i = &i; POZOR!!!! scanf("%d", p_i); printf("%d", *p_i); Obecný pointer na cokoliv:

Více

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.

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

Více

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd 7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená

Více

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

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

Více

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

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é

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 int policko[100]; // tj. pole je od 0 do 99!!! policko[5] = 7; // pozor je to 6. prvek s indexem 5

Více

Jazyk C# (seminář 6)

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í

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1

SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1 SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1 Autor: Ing. Michal Bližňák Témata cvičení: Bleskový úvod do C++ Rozdíly mezi C a C++ Základním rozdílem mezi C a C++ samozřejmě je, že C++ je na rozdíl od tradičního

Více

Programování v jazyce C a C++

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

Více

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze

Více

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++ 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

Více

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

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í

Více

Algoritmizace a programování

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

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2. C++ Akademie SH Za áte níci C++ 2. kv tna 2011 Obsah 1 Objektov orientované programování Obsah Objektov orientované programování 1 Objektov orientované programování P et ºování Jev, díky kterému m ºeme

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s

Více

Zpracoval: houzvjir@fel.cvut.cz

Zpracoval: houzvjir@fel.cvut.cz Zpracoval: houzvjir@fel.cvut.cz 10. Objektově orientované programování v C++. Přetěţování operátorů, generické funkce a třídy, výjimky, knihovny. (A7B36PJC) Obsah OOP v C++... 2 Pro připomenutí - Základní

Více

Standardní algoritmy v C++.

Standardní algoritmy v C++. Standardní algoritmy v C++. Standardní algoritmy jsou součástí STL. Jedná se o spoustu užitečných šablon funkcí, které za nás naprogramoval někdo jiný. Na nás je jen, abychom je používali. Také si ukážeme

Více

Programování v jazyce C a C++

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

Více

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++ 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é

Více

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

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ů

Více

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v

Více

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787 Stručný obsah První týden 25 den 1 Začínáme 27 den 2 Anatomie programu C++ 43 den 3 Proměnné a konstanty 57 den 4 Výrazy a příkazy 79 den 5 Funkce 107 den 6 Objektově orientované programování 141 den 7

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden

Více

Pole a kolekce. v C#, Javě a C++

Pole a kolekce. v C#, Javě a C++ Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java

Více

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

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

Více

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

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:

Více

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

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

Více

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů Ukazatele a pole 204 Deklarace jednorozměrného pole s inicializací Chceme-li pole v deklaraci inicializovat, zapíšeme seznam inicializátorů jednotlivých prvků do složených závorek: #define N 5 int A[N]

Více

Jazyk C++ I. Šablony 2

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

Více

Lineární spojový seznam (úvod do dynamických datových struktur)

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

Více

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty. Proměnná Pojmenované místo v paměti sloužící pro uložení hodnoty. K pojmenování můžeme použít kombinace alfanumerických znaků, včetně diakritiky a podtržítka Rozlišují se velká malá písmena Název proměnné

Více

Abstraktní třídy, polymorfní struktury

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í

Více

map, multimap - Asociativní pole v C++.

map, multimap - Asociativní pole v C++. map, multimap - Asociativní pole v C++. Jedná se o asociativní pole. V asociativním poli jsou uloženy hodnoty ve tvaru (klíč,hodnota), kde klíč je vlastně "index" prvku. Klíčem může být libovolný objekt,

Více

Ukazatele, dynamická alokace

Ukazatele, dynamická alokace Ukazatele, dynamická alokace 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, Martin Mazanec Karel Richta,

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

Úvod do programovacích jazyků (Java)

Ú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

Více

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

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

Více

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro: 21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c)

Více

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write(\nPrumerna teplota je {0}, tprumer); Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());

Více

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

Programování v C++ 1, 14. cvičení Programování v C++ 1, 14. cvičení výpustka, přetěžování funkcí, šablony funkcí 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 funkcí

Více

konstruktory a destruktory (o)

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ň

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory Výhody objektového řešení Nástroje pro IO operace jsou v C++ součástí knihoven Hierarchie objektových

Více

Množina v C++ (set, multiset).

Množina v C++ (set, multiset). Množina v C++ (set, multiset). Množina je datová struktura, ve které jsou uloženy nějaké prvky. V množině nesmí být dva stejné prvky. Naopak multimnožina může obsahovat i stejné prvky. Nad množinou lze

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

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

Ú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

Více

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++ 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

Více