Funkční objekty v C++.
|
|
- Jiří Šmíd
- před 8 lety
- Počet zobrazení:
Transkript
1 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í objekt na místě, kde se očekává ukazatel na funkci. Než se začneme věnovat využití funkčních objektů, zopakujeme si, jak přetížit operátor (). Ukážeme si vytvoření jednoduchého funkčního objektu. #include <iostream> using namespace std; class pokus public: int operator()(int parametr); ; pokus::operator()(int parametr) cout << "Je volan operator () s parametrem " << parametr << endl; return parametr * 2; int main() pokus objekt; objekt(0); // Nebo: objekt.operator()(0); cout << objekt(10) << endl; return 0; Výsledek: Vytvořili jsme si jednoduchou třídu funkčních objektů, třída ma operátor () pro parametr int. Instanci této třídy tedy lze použít (zapsat) jako funkci (volání funkce) s parametrem int. Jedná se pouze o ukázkový příklad, který nemá snad žádné využití. Než se dostaneme k poněkud užitečnějším funkčním objektům, podívejme se nejprve na jeden problém, který nemá s funkčními objekty nic společného.
2 Představme si, že chceme vytvořit funkci, která zjistí, kolik prvků v nějakém kontejneru, nebo poli vyhovuje nějaké podmínce. Podmínku v době psaní naší funkce neznáme. Naše funkce by měla být univerzálně použitelná, pro jakoukoliv podmínku. Jedno z možných řešení je mít jako parametr naší funkce ukazatel na funkci vracející bool, která vrátí, zda její parametr odpovídá podmínce. Ukažme si to na příkladu: #include <iostream> #include <vector> using namespace std; bool podminka(int a) /* Je cislo mensi, než 3? */ return a < 3; template<class InputIterator> int pocetplatnych(inputiterator zacatek, InputIterator konec, bool (*fce)(int)) register int pocet = 0; for(inputiterator i = zacatek; i!= konec; i++) if (fce(*i)) pocet++; return pocet; int main() vector<int> v; int pole[5] = 1, 2, 3, 4, 5 ; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); v.push_back(-20); cout << pocetplatnych(v.begin(), v.end(), podminka) << endl; cout << pocetplatnych(pole, &pole[5], podminka) << endl; return 0; Výsledek: Naše funkce pocetplatnych může mít jako svůj třetí parametr jakoukoliv funkci (ukazatel na funkci), která má jako parametr int a vrací bool. Toto řešení má několik nedostatků. Za prvé v
3 momentě, kdy budeme chtít, použít jinou podmínku (Například <5 místo <3.), nebudeme moci použít funkci podminka, budeme muset napsat novou podmínku. To by se snad dalo ještě obejít pomocí globální proměnné, ale problém by nastal, kdyby jsme chtěli například podmínku 3 < x < 5. Naše funkce pocetplatnych by se už vůbec nedala použít pro pole, nebo kontejner obsahující jiné prvky než int. Chceme-li napsat opravdu obecnou funkci pocetplatnych, musíme použít funkční objekty. Kdyby jsme si chtěli vytvořit nějakou třídu s definovaným operátorem (), a její instanci použít jako parametr naší funkce pocetplatnych, překladač by to odmítl jako nekompatibilitu typů. (Instance třídy není ukazatel na funkci.) Musíme naší šablonu funkce pocetplatnych poněkud zobecnit. Parametrem šablony nebude jenom typ iterátoru, ale další typ, který jsem nazval Funkce. Třetí parametr funkce pocetplatnych bude parametr typu Funkce. Tím docílíme toho, že parametrem může být "cokoliv". Tělo funkce pocetplatnych nijak měnit nemusíme. Podívámeli se podrobně na vzniklou šablonu funkce zjistíme, že za typ Funkce může být dosazen buď typ funkce s jedním parametrem, která vrací bool (V našem případě může vracet i int.), nebo třída, která má jako veřejnou metodu operátor () s jedním parametrem, vracejícím bool, nebo int. Podívejme se na příklad. #include <iostream> #include <vector> using namespace std; class TridaFunkcnichObjektu private: int HorniMez; public: TridaFunkcnichObjektu() : HorniMez(0) TridaFunkcnichObjektu(int mez) : HorniMez(mez) bool operator()(int i) return i < HorniMez; void nastavmez(int mez) HorniMez = mez; ; bool podminka(int a) return a < 3; // pokr.
4 // pokr template<class InputIterator, class Funkce> int pocetplatnych(inputiterator zacatek, InputIterator konec, Funkce fce) register int pocet = 0; for(inputiterator i = zacatek; i!= konec; i++) /* fce je typu Funkce. Prave kvuli nasledujiciho radku jsou omezeni na typ Funkce. Bud se musi jedna o ukazatel na funkci, nebo o tridu funkcnich objektu - viz text nad prikladem. */ if (fce(*i)) pocet++; return pocet; int main(int argc, char **argv) vector<int> v; int pole[5] = 1, 2, 3, 4, 5 ; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); v.push_back(-20); cout << pocetplatnych(v.begin(), v.end(), podminka) << endl; cout << pocetplatnych(pole, &pole[5], podminka) << endl; cout << "To same:" << endl; TridaFunkcnichObjektu funkcniobjekt(3); cout << pocetplatnych(v.begin(), v.end(), funkcniobjekt) << endl; cout << pocetplatnych(pole, &pole[5], funkcniobjekt) << endl; funkcniobjekt.nastavmez(5); cout << endl << pocetplatnych(v.begin(), v.end(), funkcniobjekt) << endl; cout << pocetplatnych(pole, &pole[5], funkcniobjekt) << endl; return 0; Výsledek : Šablona funkce pocetplatnych je nyní hodně obecná. Lze ji použít na jakýkoliv
5 kontejner, obsahující instance jakéhokoliv typu. Podmínka může být libovolná, kterou lze v C++ zapsat. Použití šablony funkce pocetplatnych je znázorněno v jednoduché funkci main. Vytvořili jsme vlastně něco jako obecný algoritmus pracující s kontejnery. V knihovně STL je implementováno mnoho algoritmů pracujících s kontejnery. Až se budeme algoritmy v STL zabývat, uvidíme, že v STL je i obdoba naší šablony funkce pocetplatnych. Ještě než se podíváme na standardní algoritmy v STL, budeme se zabývat funkčními objekty v STL. V STL je také několik standardních funkčních objektů. Funkční objekty se velmi často používají pro práci se standardními algoritmy, ale je možné je používat i u vlastních šablon funkcí, či metod. STL funkční objekty. Jestliže chceme pracovat se standardními algoritmy, je dobré znát standardní funkční objekty, nebo si umět vytvořit vlastní. Šablony unary_function a binary_function V STL existují třídy unárních a binárních funkčních objektů. Unární funkční objekt je funkční objekt, který má jen jeden parametr operátoru (). Binární funkční objekt je funkční objekt, který má dva parametry operátoru (). Šablony unary_function a binary_function jsou šablony struktur. Obě šablony slouží jako nadtřídy (Jedná se sice o struktury, ale budu používat raději pojem třída. Slovo "nadstruktura" se mi zdá nějaké divné.) pro třídy funkčních objektů. Nemají žádnou metodu, ani atribut. Obsahují pouze definici vnitřních typů. Neobsahují dokonce ani operátor (). Každá standardní třída funkčních objektů je šablonou třídy (struktury), a dědí z jedné z těchto dvou šablon tříd (struktur). Každá standardní třída funkčních objektů rozšíří tyto šablony minimálně o operátor (). Šablona unary_function má dva parametry, první udává typ parametru, druhý udává typ návratové hodnoty operátoru(). Šablona binary_function má 3 parametry. První dva udávají typy prvního a druhého
6 parametru operátoru(). Poslední parametr udává typ návratové hodnoty parametru (). Programátor, který používá funkční objekty s šablonami binary_function a unary_function nepříjde nijak do styku. Bude pracovat s šablonami odvozenými. Přesto si myslím, že je dobré o binary_function a unary_function vědět. Rovněž je dobré použít je jako nadtřídu při psaní vlastních tříd funkčních objektů. Třídy unárních funkčních objektů Šablony tříd unárních funkčních objektů z STL jsou potomky šablony třídy (struktury) unary_function. Seznam některých tříd unárních funkčních objektů:
7 Třídy binárních funkčních objektů Šablony tříd binárních funkčních objektů z STL jsou potomky šablony třídy (struktury) binary_function. Seznam některých tříd binárních funkčních objektů:
8 Příklad binárního funkčního objektu less: Všechny tyto třídy jsou deklarovány v hlavičkovém souboru function v prostoru jmen std. Omezení na parametr šablony vyplývá z její činnosti. Například šablona plus může mít jako svůj parametr typ, který má definován operátor + (implicitně, nebo definován operator+). Nyní si ukážeme jednoduchý příklad. Na přednášce o množinách a multimnožinách bylo uvedeno, že tyto kontejnery mají poslední, nepovinný parametr, kterým je funkční objekt. Implicitní hodnota posledního parametru je less<t>, kde T je první parametr kontejneru. #include <map> #include <string> #include <iostream> #include <functional> using namespace std; int main() map<string,string,greater<string> > pole; pole.insert(make_pair(string("klic1"),string("hodnota1"))); pole.insert(make_pair(string("klic2"),string("hodnota2"))); cout << pole[string("klic1")] << endl; /* Klíče jsou seřazeny pomocí relačního operátoru >, nikoliv < jako v předchozích článcích.*/ return 0; Výsledek: Tento příklad zatím asi nikoho nepřesvědčil o důležitosti funkčních objektů. Jejich význam se ukáže až dále. Šablony binder1st a binder2nd V souvislosti se standardními třídami funkčních objektů je dobré se také seznámit s šablonami binder1st a binder2nd. Jedná se o šablony tříd s operátorem (), který má 1 parametr. Obě třídy zapouzdřují binární funkční objekt (operátor () má 2 parametry) a jednu hodnotu. Tato hodnota bude daná jako první parametr u šablony binder1st nebo jako druhý parametr u šablony binder2nd. Zbývající parametr bude předán operátoru () jako parametr.
9 Příklad binder1st: Příklad binder2nd: Obě třídy tedy vlastně slouží k převedení binárního funkčního objektu na unární s pevně danou hodnotou jednoho ze svých parametrů. Zní to možná složitě, ale vše si ukážeme na jednoduchém příkladu. K vytvoření instancí tříd binder1st a binder2nd můžeme použít jednak konstruktory, nebo pomocné funkce jménem bind1st a bind2nd. Ve svém minulém příkladu jsem vytvořil šablonu funkce pocetplatnych, která vrací počet prvků v kontejneru vyhovujících nějaké podmínce, která je také předána jako parametr. Podmínka je buď ukazatel na funkci s jedním parametrem, nebo funkční objekt, jehož operátor () má jeden parametr. Vytvořil jsem třídu funkčních objektů, která má jeden atribut. Takto jsem se snažil řešit problém, kdy operátor () má jen jeden parametr, já bych potřeboval aby měl dva. Nyní se podíváme jak napsat stejný příklad jen pomocí standardních šablon z STL. V STL existuje algoritmus count_if (Algoritmy podrobně probereme příště.), který dělá stejnou činnost jako moje funkce pocetplatnych. S tím rozdílem, že vrací void, protože výsledek je uložen v
10 posledním parametru, který je předáván jako reference. Zatímco moje funkce umožňovala vrátit výsledek pouze jako int, funkce count_if z STL má jako parametr i typ výsledku, což umožňuje ještě větší abstrakce. Můj poslední příklad z minulého článku napsaný jen pomocí standardních šablon vypadá takto: #include <vector> #include <iostream> #include <functional> #include <algorithm> using namespace std; int main(int argc, char **argv) vector<int> v; int vysledek = 0; int pole[5] = 1, 2, 3, 4, 5 ; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); v.push_back(-20); binder2nd<less<int> > funkcniobjekt = bind2nd(less<int>(),3); /* Nyní volani funkcniobjekt(x) je stejne jako volani less<int>(x,3) */ vysledek=count_if(v.begin(),v.end(),funkcniobjekt); cout << vysledek << endl; vysledek = 0; vysledek=count_if(pole,&pole[5],funkcniobjekt); cout << vysledek << endl; vysledek = 0; vysledek=count_if(pole,&pole[5],bind2nd(less<int>(), 5)); cout << vysledek << endl; vysledek = 0; vysledek=count_if(v.begin(),v.end(),bind2nd(less<int>(), 5)); cout << vysledek << endl; return 0; Výsledek: Ve svých příkladech používám vždy kontejnery s primitivními datovými typy, nebo s řetězci. Musím ale zdůraznit, že vše lze použít i na kontejnery obsahující instance libovolných tříd, které mají definovány příslušné operátory.
11 Cvičení. Cv. 1. Napište program, který načítá libovolné množství double hodnot v rozmezí od do Tuto jedinou hodnotu ukládá do struktury DoubleValue, která má dva atributy. První je celé číslo a druhý je počet platných desetinných míst (např > na dvě platné místa : 2357, 2). Udržujte double hodnoty v podobě struktury DoubleValue v šabloně list. Setřiďte double data funkcí sort pomocí funkčních objektů. Funkční objekty musí být odvozené od unary_function nebo binary_function. Navrhněte takové funkční objekty, aby poskytli třídit dvěma způsoby (dva fukční objekty): vlastním funkčním objektem podle velikosti od nejmenší hodnoty po největší. vlastním funkčním objektem podle velikosti od nejmenší hodnoty po největší, ALE liché číslo je menší než sudé podle celé části double hodnoty (ignorace desetinné části), až potom mezi sudými a lichými čísly od nejmenší hodnoty po největší včetně desetinných míst (např , 33.56, 33.58, > 33.56, 33.58, 22.36, 80.91). standardním funkčním objektem STL podle velikosti od největší hodnoty po nejmenší.
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íceStandardní 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íceVector 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ícemap, 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íceIterá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íceStandardní 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<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
VícePB161 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ícepř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íceMnožina čísel int stl-set-int.cpp
Řetězce, pole a STL V C++ je výhodné pro práci s řetězci použít třídu string, funkce C jsou stále k dispozici cstring, ukazatele a pole lze stále používat stejně, jako v C, použití iterátorů a dalších
VíceŠ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
VícePokroč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ícePROGRAMOVÁ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íceZpracoval: 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íceMartin 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íceVí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íceC++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++
C++ Akademie SH 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory Za áte níci C++ 20. b ezna 2011 Obsah 1 Prom nné - primitivní typy Celá ísla ƒísla s pohyblivou desetinnou árkou, typ bool 2 Podmínka
VíceŠ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
VíceDynamická 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
VíceJazyk 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íceC++ 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ů,
VíceŠablony funkcí a tříd (Templates) Genericita
Šablony funkcí a tříd (Templates) Genericita Šablony funkcí Motivace přetížíme funkci pro výpočet minima ze dvou hodnot: int minimum(int a, int b) { return (a
VíceSyntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:
Vyjímky. Pod pojmem výjimka se rozumí nějaká výjimečná situace, která nastane v dané funkci. V jazyce C i C++ se často používá návratových hodnot funkcí, které vracejí úspěšnost provádění nějaké operace
VíceÚ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ícePokroč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ícepř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íceHornerovo schéma. je algoritmus výpočtu hodnoty polynomu P(x) v bodě x 0. eliminuje výpočet i-té mocniny převodem na postupné násobení.
Hornerovo schéma je algoritmus výpočtu hodnoty polynomu P(x) v bodě x 0 n + n 1 + L + + n n 1 1 P( x) = a x a x a x a eliminuje výpočet i-té mocniny převodem na postupné násobení 0 Vstup: Algoritmus výpočtu
VíceVýč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íce1 Nejkratší cesta grafem
Bakalářské zkoušky (příklady otázek) podzim 2014 1 Nejkratší cesta grafem 1. Uvažujte graf s kladným ohodnocením hran (délka). Definujte formálně problém hledání nejkratší cesty mezi dvěma uzly tohoto
VícePokroč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íceDě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í
VíceProgramová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íceProgramová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
VíceProgramová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íce8 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íceMě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ícefor (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íceProgramová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íceUkazatel (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íceSprávné vytvoření a otevření textového souboru pro čtení a zápis představuje
f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru
VíceHotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace
Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace VZDĚLÁVACÍ MATERIÁL ZPRACOVÁN V RÁMCI PROJEKTU EU PENÍZE STŘEDNÍM ŠKOLÁM - OPVK 1.5 Registrační
VíceProgramová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íceProgramová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ícePokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++ Proudy pro standardní vstup a výstup V jazyce C++ provádíme textový vstup a výstup prostřednictvím tzv. datových proudů Datové
VíceVÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Čí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íceAbstraktní 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ícePROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK
PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:
VíceKonstruktory 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íceMichal 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ícePB161 Programování v jazyce C++ Přednáška 10
.. PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 23. listopadu 2015 PB161 přednáška 10: šablony 23. listopadu 2015 1 / 29 K zamyšlení Jaký je rozdíl mezi new int[10] a new int[10]()?
VícePB161 Programování v jazyce C++ Přednáška 10
PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 27. listopadu 2017 PB161 přednáška 10: šablony 27. listopadu 2017 1 / 33 Šablony PB161 přednáška 10: šablony 27. listopadu 2017 2 / 33
Více1. Dědičnost a polymorfismus
1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář
VícePB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Kontejnery Iterátory Algoritmy Nikola Beneš 4. října 2016 PB161 přednáška 3: kontejnery, iterátory, algoritmy 4. října 2016 1 / 25 Standardní knihovna C++ Už
VíceObjektové programování
Objektové programování - přináší nové možnosti a styl programování - vytváří nový datový typ, který umí vše co standardní datové typy + to co ho naučíme - překladač se k tomuto typu chová stejně jako k
VícePB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
VícePř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ícePB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
VíceÚ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íceIUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí
Velké projekty v C velký = 100ky a více řádek udržovatelnost, bezpečnost, přehlednost kódu rozdělení programu do více souborů další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Globální
VícePolymorfismus. Č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ícePB161 6. přednáška (26. října 2015)
PB161 6. přednáška (26. října 2015) Standardní knihovna C++ obsahuje řadu částí, některé už jsme viděli (strings, I/O streams) mimo jiné obsahuje i knihovní funkce ze standardní knihovny jazyka C jiné
VíceZá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íceObjektově 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íceJazyk C++ II. STL knihovna kontejnery část 2
Jazyk C++ II STL knihovna kontejnery část 2 AR 2013/2014 Jazyk C++ II Asociativní kontejnery Slovníky u kterých pořadí dat nemá smysl. Kontejner si sám určuje, kam který údaj uloží. Údaje mají tvar klíč/hodnota.
VícePB161 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íceProgramování v C++ 1, 17. cvičení
Programování v C++ 1, 17. cvičení výjimky 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 Binární vyhledávací
VícePB161 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ícePŘ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íceJazyk 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ícePB161 Programování v jazyce C++ Přednáška 6
PB161 Programování v jazyce C++ Přednáška 6 Kontejnery Iterátory Algoritmy Nikola Beneš 26. října 2015 PB161 přednáška 6: kontejnery, iterátory, algoritmy 26. října 2015 1 / 37 Standardní knihovna C++
VícePokroč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íceVÝ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íceJazyk C++ I. Šablony
Jazyk C++ I Šablony AR 2013/2014 Jazyk C++ I Úvod Zatím známe programovací styly: Strukturované programování, Objektově orientované programovaní. AR 2013/2014 Jazyk C++ I 2 Příklady void Print(const int&
VíceÚ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íceObsah. 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Úvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
VíceHrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.
Hrátky s funkcemi PV173 Programování v C++11 Vladimír Štill, Jiří Weiser Fakulta Informatiky, Masarykova Univerzita 29. září 2014 Hrátky s funkcemi PV173 29. září 2014 1 / 23 Úvod Na co se podíváme? předávání
VíceProstory jmen. #include<iostream.h> namespace RadimuvProstor { int secti(int a, int b); class Trida { private: int Atribut; public: void metoda();
Prostory jmen. Prostor jmen je oblast platnosti identifikátorů. Představme si situaci, kdy budeme chtít mít v jednom programu stejné identifikátory (názvy tříd, proměnných, metod, funkcí atd...). Nelze
Více7. 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íceJazyk 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íceChová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ícePř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ícePB161 Programování v jazyce C++ Přednáška 8
.. PB161 Programování v jazyce C++ Přednáška 8 Výjimky Správa prostředků (RAII) Nikola Beneš 9. listopadu 2015 PB161 přednáška 8: výjimky, RAII 9. listopadu 2015 1 / 24 . PB161 přednáška 8: výjimky, RAII
VíceIB111 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,
VícePB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Kontejnery Iterátory Algoritmy Nikola Beneš 2. října 2018 PB161 přednáška 3: kontejnery, iterátory, algoritmy 2. října 2018 1 / 27 Automatická dedukce typů (od
VíceDynamicky 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:
VícePB161 Programování v jazyce C++ Přednáška 5
PB161 Programování v jazyce C++ Přednáška 5 Jmenné prostory Vstupní/výstupní proudy Nikola Beneš 19. října 2015 PB161 přednáška 5: jmenné prostory, vstupní/výstupní proudy 19. října 2015 1 / 29 Jmenné
VíceZPRO 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íceProstory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...
Proudy v C++ Jmenné prostory Prostory jmen při vkládání několika hlavičkových souborů může vzniknout kolize zeleznice.h const int x=10; typedef struct {... } Hradlo; logika.h const int x=5; typedef struct
VíceProgramová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íceProgramování v C++ První kroky
Programování v C++ První kroky Karel Mozdřeň 29. října 2009 1 Obsah 1 Úvod 5 1.1 Pro koho je kniha určena...................... 5 1.2 Proč první kroky?.......................... 5 2 Začínáme 6 2.1 Hello,
VíceZáklady programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP
Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................
VíceZá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ícePole a Funkce. Úvod do programování 1 Tomáš Kühr
Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně
Více24-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ícePREPROCESOR 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,
VícePB přednáška (23. listopadu 2015)
PB161 10. přednáška (23. listopadu 2015) Šablony Motivace snaha o co nejmenší duplikaci kódu co když máme kód, který chceme použít pro různé typy? generická funkce (maximum, minimum, swap, ) kontejnery
VíceProgramová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
VíceArchitektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.
Architektura COM 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 Obsah přednášky Historie Component Object Model (COM)
Více