C++ objektově orientovaná nadstavba programovacího jazyka C
|
|
- Aneta Novotná
- před 5 lety
- Počet zobrazení:
Transkript
1 C++ objektově orientovaná nadstavba programovacího jazyka C (2. část) Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 18. května 2015 České vysoké učení technické v Praze, Fakulta elektrotechnická 1
2 1 Dynamická alokace proměnných, struktur a poĺı Dynamická alokace proměnných (nejčastěji struktur) a jejich poĺı se v C++ nejčastěji provádí pomocí operátorů new, delete a delete [ ]. Při dynamickém alokování zejména rozsáhlých datových struktur je však třeba pracovat s určitou ideou obsazování paměti, jinak pamět ové nároky programu prudce rostou. Ještě častější chybou je neuvolňování dříve dynamicky alokované paměti anebo její nesprávné uvolňování, zejména nesprávné uvolňování dynamicky alokovaných poĺı. V následujícím programu bude demonstrováno nesprávné i správné uvolňování dynamicky alokovaných struktur. Pro jednoduchost je zvolena pouze jednoduchá struktura obsahující dvě proměnné float a příkazem typedef je definován ukazatel na tuto strukturu. Po prvním řádku programu main máme definovány dva ukazatele na deklarovanou strukturu, není však dané to, na co ukazují. Tuto situaci můžeme znázornit následujícím způsobem: Operátor new dává manažeru systémové paměti následující dvě instrukce: Alokuje potřebnou pamět (její velikost závisí na typu specifikovaném za operátorem) Uschová adresu v paměti do ukazatele, čímž ukazatel označuje umístění v paměti 2
3 #include <iostream> struct test_score { float midterm, final; ; typedef test_score * test_pointer; int main() { test_pointer score_ptr, another_score_ptr; score_ptr = new test_score; score_ptr->midterm = 99.0; score_ptr->final = 95.0; another_score_ptr = score_ptr; score_ptr = new test_score; score_ptr->midterm = 40.0; score_ptr->final = 35.0; std::cout << "1st midterm mark = " << another_score_ptr->midterm << ", 1st final mark = " << another_score_ptr->final << std::endl; std::cout << "2nd midterm mark = " << score_ptr->midterm << ", 2nd final mark = " << score_ptr->final; another_score_ptr = NULL; // nesprávný způsob likvidace ukazatele delete score_ptr; // správný způsob likvidace // implicitně je nacrácena hodnota (int)0 3
4 Po aplikaci prvního příkazu new je už jasná poloha struktury v paměti, nejsou však dosud definovány jednotlivé její prvky: Po následujících dvou přiřazovacích příkazech však již jsou tyto prvky definovány: a po přiřazení jednoho ukazatele druhému oba dva ukazatele označují stejné místo v paměti: 4
5 Po aplikaci druhého příkazu new a následujících dvou přiřazujících příkazů již oba ukazatelé označují jiné místo v paměti a taktéž obsahy obou struktur jsou již různé: Následující dva příkazy výstupu tuto skutečnost potvrzují: 1st midterm mark = 99, 1st final mark = 95 2nd midterm mark = 40, 2nd final mark = 35 Následující přiřazení nulového pointeru NULL je typickou a častou chybou v paměti zůstanou prvky struktury, které však již nejsou dosažitelné: Správný způsob likvidace struktury je proveden příkazem delete, po němž jsou pamět ová místa pro prvky struktury uvolněna: 5
6 2 Operátor delete [ ] Při uvolňování dynamicky alokovaného pole se používá také operátor delete, za který ovšem musíme přidat prázdné indexové závorky: delete [ ] array; Při uvolňování dynamicky alokovaného pole objektů se pro každý z prvků zavolá destruktor. Důležité poznámky: Pokud při uvolňování pole neuvedeme za kĺıčovým slovem závorky [ ], překladač nebude hlásit chybu. V případě pole objektů se ale zavolá destruktor pouze pro první prvek pole a záleží na konkrétní struktuře programu, co to způsobí. U některých (především starších) překladačů jazyka C++ je nutné do lomených závorek za delete připsat skutečný počet prvků (týká se to např. starších verzí překladače Borland C++) 6
7 3 Nezdařená alokace dynamické proměnné Norma ANSI/ISO jazyka C++ stanoví, že operátor new v případě neúspěchu (v typickém případě nedostatku paměti) vyvolá výjimku bad alloc. Výjimku lze tedy ošetřit pomocí bloků try a catch: try // v ANSI C++ { pld = new long double; catch(bad_alloc) { // řešení situace Chceme-li se vyhnout práci s výjimkami, použijeme operátor new s dodatečným parametrem nothrow: // v ANSI C++ pld = new(nothrow) long double; if (!pld) error(); 7
8 4 Předávání odkazem V jazyce C++ můžeme také předávat parametry funkcí odkazem. Před parametr, který chceme předat odkazem, musíme napsat znak &. V těle funkce se s takovým parametrem pracuje stejně jako s parametrem předaným hodnotou (použije se tzv. reference). Jazyk C++ je tedy v tomto ohledu bližší jazyku Fortran než jazyk C. Následující program přehodí obě proměnné: #include <stdio.h> void swap(int &a, int &b) { int c = a; a = b; b = c; int main() { int a = 5, b = 7; printf("%d %d\n", a, b); swap(a, b); printf("%d %d", a, b); V jazyce C bychom přehození obou proměnných museli řešit pomocí ukazatelů. 8
9 5 Odvozené třídy class student { public : enum year {junior, senior, grad; student(char *nm, int id); void print() const; protected : int student_id; char name[30]; ; class grad_student : public student { public : enum support {fellowship, other; grad_student(char *nm, int id, year x); void print() const; protected : char thesis[80]; ; V tomto příkladu je grad student odvozená třída a student je základní třída. Užitím kĺıčového slova public za dvojtečkou v záhlaví odvozené třídy říkáme, že členy protected a public ve třídě student jsou děděny jako protected a public do třídy grad student. Privátní členy nejsou dostupné. Nyní každý graduate student je student, ale student nemusí být graduate student. 9
10 6 Redefinice unárního operátoru V následujících dvou příkladech bude redefinován unární operátor ++ tak, aby byl použitelný pro správné sčítání vteřin, minut, hodin a dní. 6.1 Použití funkce třídy V tomto případě je aritmetika správného sčítání vteřin, minut, hodin a dní naprogramována funkcí třídy operator ++(), která používá další funkci třídy tick() a vrací data třídy pomocí vždy vytvořeného ukazatele this. Správná aritmetika je zajištěna výrazy konstruktoru a výpis dní, hodin, minut a vteřin zajišt uje funkce print(), která nemodifikuje data třídy. #include <iostream> #include <iomanip> using namespace std; class clock { public : inline clock(unsigned long i); //konstruktor a konverze na dny, hodiny, void print() const; //formátovaný tiskový výstup, nemodifikuje objekt void tick(); //přidá jednu vteřinu, tato tedy není const clock operator ++() { tick(); return *(this); //this ukazuje na objekt private : unsigned long tot_secs, secs, mins, hours, days; ; 10
11 inline clock::clock(unsigned long i) { //konstruktor nemá typ tot_secs = i; secs = tot_secs % 60; mins = (tot_secs / 60) % 60; hours = (tot_secs / 3600) % 24; days = tot_secs / 86400; void clock::tick() { clock temp = clock(++tot_secs); secs = temp.secs; mins = temp.mins; hours = temp.hours; days = temp.days; void clock::print() const { cout << setw(4) << days << " d:" << setw(2) << hours << " h:" << setw(2) << mins << " m:" << setw(2) << secs << " s" << endl; int main() { clock t1(59), t2(172799); // = dva dny minus jedna vteřina cout << "Pocatecni casy jsou..." << endl; t1.print(); t2.print(); ++t1; ++t2; cout << "Po pricteni jedne sekundy..." << endl; t1.print(); t2.print(); 11
12 6.2 Použití separátní funkce V tomto případě je unární operátor ++ redefinován pomocí funkce, která není členem třídy. První část programu je proto mírně odlišná od předcházející verze, druhá část programu je však přesně stejná jako předcházející strana, tj. clock unchanged.cpp (viz též dole). #include <iostream> #include <iomanip> using namespace std; class clock { public : inline clock(unsigned long i); void print() const; void tick(); private : unsigned long tot_secs, secs, mins, hours, days; ; /* Definice funkcí, která není členem třídy */ clock operator ++(clock& c) { //je využito odkazu c.tick(); return c; #include "clock unchanged.cpp" 12
13 6.2.1 Prefixový a postfixový operátor //Prefixová a postfixová forma přetížení operátoru ++: //Upravená verze Richarda Vachuly tak, aby fungovala pod Digital Mars i GCC #include <iostream> class Foo { int value; public : //Konstruktor: Foo(int val = 0) : value(val) { //Digital Mars musí val mít v () ne v { //Přetížení unárních operátorů Foo& operator++(); //prefix Foo operator++(int); //postfix //Přetížení binárního operátoru friend std::ostream& operator<<(std::ostream& outp, const Foo& f); ; Foo& Foo::operator++() { //unary prefix this->value++; return *this; Foo Foo::operator++(int) { //unary postfix Foo temp(*this); ++(*this); return temp; std::ostream& operator<<(std::ostream& outp, const Foo& f) { //binary return outp << f.value; 13
14 int main() { Foo foo(5); // std::cout << foo << std::endl; std::cout << ++foo << std::endl; std::cout << foo << std::endl; std::cout << foo++ << std::endl; std::cout << foo << std::endl; // return 0; dává očekávaný výsledek Virtuální funkce Virtuální funkce umožňují v hierarchii tříd vytváření mimořádného polymorfismu. Třída, která obsahuje pouze virtuální funkce se nazývá abstraktní třída (takovou třídu lze deklarovat, ale ne definovat objekt této třídy). 14
15 V následujícím příkladu máme jednu abstraktní bázovou třídu, která obsahuje jednu standardní virtuální funkci a jednu čistou ( pure ) virtuální funkci. Čistá virtuální funkce musí být ve všech dceřiných třídách definována, zatímco u standardní virtuální funkce lze v odvozených třídách použít její implicitní ( default ) chování definované v rodičovské třídě. 15
16 #include <iostream> using namespace std; // kvúli cout const double PI = ; // zde nejde o přesnost výpočtu class shape { // abstraktní bázová třída, obsahuje pouze virtuální funkce public : virtual double area() const { return 0; // definováno "default" chování virtual char *get_name() = 0; // čistě virtuální funkce "pure" virtual protected : double x, y; // Digital Mars i GNU GCC fungují dobře i bez tohoto řádku ; class rectangle : public shape { // "Obdélník" odvozený z abstraktní třídy public : rectangle(double h, double w) : height(h), width(w) { // přiřazení délek double area() const { return height * width; char *get_name() { return (char *)"Obdelnik: "; // pro Digital Mars C++ private : // (char *) není nutné double height, width; // pro GNU GCC warning ; class circle : public shape { // "Kruh" odvozený z abstraktní třídy public : circle(double r) : radius(r) { // přiřazení poloměru double area() const { return PI * radius * radius; char *get_name() { return (char *)"Kruh: "; private : double radius; ; 16
17 Kromě funkcí tříd popisujících chování obdélníku a kruhu vytvoříme i jednodušší odvozenou funkci pro úsečku, která pro výpočet obsahu použije implicitní chování funkce rodičovské třídy. Čistě virtuální funkce však musí být definována. class line : public shape { // zde je použit implicitní konstruktor public : char *get_name() { return (char *)"Usecka: "; // musí být, jde o pure ; // bylo použito default chování pro výpo čet plochy, tj. nulová plocha Hlavní program pak jednoduše pracuje se všemi třemi tvary (obdélníkem, kruhem i úsečkou): int main() { shape *ptr_shape; //shape something; // chyba abstraktní bázovou t řídu nelze vytvořit přímo rectangle rec(4, 5.5); // toto je přímá inicializace výšky a šířky circle cir(10); // zde je přímá inicializace jen pro poloměr kruhu line lin; cout << "Tento program pouziva hierarchie trid pro tvary...\n" ; ptr_shape = &rec; cout << ptr_shape->get_name() << "plocha = " << ptr_shape->area() << '\n'; ptr_shape = ○ cout << ptr_shape->get_name() << "plocha = " << ptr_shape->area() << '\n'; ptr_shape = &lin; cout << ptr_shape->get_name() << "plocha = " << ptr_shape->area(); // Digital Mars i GNU GCC vracejí implicitn ě nulu, tj. return nemusí být 17
18 Pokud bychom se pokusili definovat objekt rodičovské třídy, která je abstraktní, dostali bychom chybové hlášení: shape something; ^ virtual.cpp(40) : Error: cannot create instance of abstract class 'shape' --- errorlevel 1 Chybové hlášení bychom rovněž obdrželi, pokud bychom v odvozené třídě line nedefinovali funkci get name(): line lin; ^ virtual.cpp(43) : Error: cannot create instance of abstract class 'line' --- errorlevel 1 Nakonec uvedeme výstup programu pracujícího s virtuálními funkcemi: Tento program pouziva hierarchie trid pro tvary... Obdelnik: plocha = 22 Kruh: plocha = Usecka: plocha = 0 18
19 8 Šablony Dalším nástrojem umožňujícím značný polymorfismus jsou šablony. Pomocí šablon můžeme vytvořit kód, který je použitelný pro různé datové typy. V následujícím příkladu jsou demonstrovány nejrůznější způsoby vzájemných záměn. Několik datových typů můžeme zaměňovat pomocí šablony, řetězce je však třeba zaměňovat pomocí zvláštní funkce se stejným jménem: #include <iostream> #include <string.h> // Digital Mars připouští i #include <string> tj. bez h #include <complex> //using namespace std; // kvůli rozlišení swap a std::swap NELZE zde použít template < class T > void swap(t& x, T& y) { T temp; temp = x; x = y; y = temp; void swap(char *s1, char *s2) { int max_len = (strlen(s1) > strlen(s2))? strlen(s1) : strlen(s2); char *temp = new char[max_len + 1]; strcpy(temp, s1); strcpy(s1, s2); strcpy(s2, temp); delete [] temp; 19
20 V hlavním programu pak vyzkoušíme širokou škálu záměn nejrůznějších datových typů: int main() { int k = 5, l = 9; std::complex < double > a = 3.14, b = 8; // pro jeden reálný argument je % // definováno v _complex.h jako přiřazení reálné části, imaginární bude 0 std::complex < float > c = 4, d = 7; // komplexní proměnné poloviční délky char str1[6] = "Brno", str2[6] = "Praha"; // stejná délka [6] kvůli záměně /*"Záměna proměnných int"*/ swap(k, l); // přímá záměna dvou proměnných int první funkcí std::cout << k << " " << l << std::endl; // i u endl se musí uvádět std:: /*"Záměna řetězců"*/ swap(str1, str2); // vyvolá se druhá definovaná funkce záměny řetězců std::cout << str1 << " " << str2 << std::endl; /*"Záměna prvního znaku v řetězci"*/ swap(*str1, *str2); // přímá záměna prvního prvku pole ([0]) první funkcí std::cout << str1[0] << " " << str2[0] << std::endl; // *str1 == str1[0] /*"Záměna komplexních proměnných"*/ std::swap(a, b); // swap je člen namespace std, swap bez std nelze použít std::cout << a << " " << b << ", velikost a = " << sizeof(a) << std::endl; std::swap(c, d); std::cout << c << " " << d << ", velikost c = " << sizeof(c); 20
21 Komplexní čísla je však nutné vzájemně vyměňovat pomocí std::swap; pokud bychom použili jen funkci swap, dostaneme chybové hlášení: swap(c, d); ^ template.cpp(41) : Error: ambiguous reference to symbol Had: swap(t&,t&) and: std::swap(_tp&,_tp&) --- errorlevel 1 Výstup tohoto programu demonstrujícího záměny dat pomocí šablon je tedy následující: 9 5 Praha Brno B P (8,0) (3.14,0), velikost a = 16 (7,0) (4,0), velikost c = 8 21
22 Obsah 1 Dynamická alokace proměnných, struktur a poĺı 2 2 Operátor delete [ ] 6 3 Nezdařená alokace dynamické proměnné 7 4 Předávání odkazem 8 5 Odvozené třídy 9 6 Redefinice unárního operátoru Použití funkce třídy Použití separátní funkce Prefixový a postfixový operátor Virtuální funkce 14 8 Šablony 19 22
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í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í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í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í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íceJazyk 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
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í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í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í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í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í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íceDě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í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í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++ 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íceUkazatele, 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í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í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í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íce2) 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í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í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íceFunkč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í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í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í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í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íce7 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íceProgramová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í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íceZápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
VíceJazyk 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í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í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Ů
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ícePř. 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í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í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í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í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í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í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 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í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íceIUJCE 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
Více9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>
9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte
VícePB161 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Ú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íceOdvozené a strukturované typy dat
Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu
Více<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
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íceGenerické 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 =
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íceZáklady jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# 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 Architektura.NET Historie Vlastnosti
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íce14.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í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í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í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++ 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í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í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íceObjektov 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ícekonstruktory 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Ú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íceTřídy a struktury v C++
katedra informatiky FEI VŠB-TU Ostrava 7. prosince 2015 Odvozené a strukturované typy dat v C základní datové typy součást normy jazyka, preprocesor použití netypových maker, raději voĺıme konstanty d
VíceVirtuální metody - polymorfizmus
- polymorfizmus - potomka lze použít v místě, kde je možné použít předka - v dosud probraných situacích byly vždy volány funkce, které jsou známy již v době překladu. V situaci, kdy v době překladu není
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íceV dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).
Jazyk C++ 1 Blok 1 Úvod do programovacího jazyka C++ Studijní cíl První blok kurzu je věnován úvodu do problematiky programovacího jazyka C++. V bloku budou rozebrány historické souvislosti programovacích
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í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íceTŘÍ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;
Více10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++
10. března 2015, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ K čemu slouží výjimky Strana 2 / 25 Obsah přednášky 1 K čemu slouží výjimky 2 Vytváření výjimek 3 Speciální případy
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í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 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í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í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í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ícePráce s polem a pamětí
3 Práce s polem a pamětí Inicializace jednorozměrného pole Jednorozměrné pole lze inicializovat přímo v deklaraci. int array[length] = {1, 5, 8, 9; array1d Prvky pole umístíte do složených závorek a oddělíte
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í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í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íceJazyk C++ II. Výjimky
Jazyk C++ II Výjimky AR 2013/2014 Jazyk C++ II Funkce abort Dříve byl obvyklý způsob zavolat metodu abort(). Metoda provádí okamžitě: Vyprázdnění vyrovnávací paměti, Ukončení celého programu, Vrátí číslo
VíceOsnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)
Osnova přednášky Programové prostředky řízení Úvod do C# II. Členy (Members) Jmenné prostory (Namespaces) Třídy (Classes) Struktury (Structs) Pavel Balda Západočeská univerzita v Plzni, FAV, KKY 2 Členy
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íceObjektově 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ů
VíceZáklady programování (IZP)
Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz
VíceZáklady programování (IZP)
Základy programování (IZP) Deváté 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 27.11.2017,
VícePokroč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íceZpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 9. Datový typ ukazatel, přetěžování funkcí, typ reference, vstup a výstup, třídy, staticky vázané metody, dědění, dynamicky vázané metody, abstraktní třídy, polymorfní datové
VícePřipravil: David Procházka. Programovací jazyk C++
17. října 2011, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ Obecně Strana 2 / 21 Jak se může program zachovat při chybě Dříve byl obvyklý způsob zavolat metodu abort. Metoda
VíceMichal 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ů
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 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íceSYSTÉ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ícePočítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006
Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem
Vícefor (i = 0, j = 5; i < 10; i++) { // tělo cyklu }
5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu
VícePreprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016
Preprocesor 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 4/2016, Lekce 9b https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start
Více