PB přednáška (5. října 2015)
|
|
- Bohuslav Navrátil
- před 4 lety
- Počet zobrazení:
Transkript
1 PB přednáška (5. října 2015) Organizační Vnitrosemestrální test bude se konat v době přednášky dvě skupiny (12-13, 13-14) papírový odpovědník, max. 20 bodů bude obsahovat náplň předchozích přednášek co udělá zadaný kód, zkompiluje se apod. Reference, const Motivace práce s ukazateli (vzpomeňte si na C) může být nebezpečná ukazatel může být neinicializovaný ukazatel může být NULL (v C++11 nullptr) odbočka: proč je nullptr lepší než NULL? NULL (převzato z C) je definováno jako číslo 0 nullptr je speciální objekt typu ukazatel rozdíl bude vidět u přetěžování funkcí Datový typ reference alternativní jméno pro objekt/proměnnou (alias) značí se symbolem & int a = 1; int b = 2; int & refa = a; // refa je reference na a int & refa2 = a; // refa2 je také reference na a int & ref; // chyba! a += 9; refa += 17; refa2 += 15; // teď je v proměnné a hodnota 42 jednodušší než ukazatel, ale bezpečnější Rozdíly mezi ukazateli a referencemi ukazatel může být neinicializovaný, reference musí být vždy inicializovaná int * ptr; // OK int & ref; // chyba 1
2 ukazatel může být nullptr, reference vždy ukazuje na skutečný objekt (i když ten objekt nemusí být validní, o tom později) int * ptr = nullptr; // V C nebo C++03: int * ptr = NULL; // s referencemi nic takového nejde ukazatel se může měnit (může ukazovat na něco jiného), reference je napevno, není způsob jak přesměrovat referenci int a = 1; int b = 2; int * ptr = &a; // ptr ukazuje na a ptr = &b; // teď ptr ukazuje na b int & ref = a; // ref je reference na a ref = b; // do proměnné a se teď vložila hodnota 2 ref = &b; // chyba! do proměnné typu int // se snažíme přiřadit ukazatel není možno se přímo odkazovat na proměnnou typu reference, tato proměnná skutečně funguje jako alias int * ptr = &a; fun1(ptr); // funkci fun1 se předal ukazatel ptr int & ref = a; fun2(ref); // funkci fun2 se předala proměnná a fun2(a); // stejný efekt jako předchozí řádek Použití referencí bezpečnější varianta ukazatelů, pokud nepotřebujeme ukazatel přesměrovávat předávání parametrů (tzv. volání odkazem) funkcím a metodám Předávání parametrů referencí umožňuje funkci měnit hodnotu proměnné volání funkce ale vypadá stejně jako volání hodnotou změna argumentu uvnitř funkce se projeví navenek v jazyce C se řešilo pomocí ukazatelů méně bezpečné (NULL, neinicializovaný ukazatel) vyžaduje v místě volání psát dereferenci všimněte si rozdílů: // jazyk C++ void swap(int & x, int & y) { 2
3 int temp = x; x = y; y = temp; int a = 3; int b = 7; swap(a, b); /* jazyk C */ void swap(int * x, int * y) { int temp = *x; *x = *y; *y = temp; int a = 3; int b = 7; swap(&a, &b); samozřejmě předávání ukazatelem (styl C) funguje i v C++, ale předávání referencí je lepší (bezpečnější, čitelnější) Konstantní reference klíčové slovo const stejně jako v C dá se použít i s referencemi int a = 3; const int & refa = a; cout << refa; // OK, vypíše 3 a = 7; // OK, hodnota a je 7 refa = 17; // chyba, refa je konstantní předávání parametrů konstantní referencí ukazuje záměr neměnit proměnnou (hlídá překladač) hlavní využití: předávání větších objektů void comparepersons(const Person & p1, const Person & p2) { cout << p1.name << " is "; if (p1.age < p2.age) cout << "younger than"; else if (p1.age > p2.age) cout << "older than"; 3
4 else cout << "the same age as"; cout << p2.name << endl; void f1(bigobject x) { /*... */ void f2(const BigObject & x) { /*... */ BigObject y; f1(y); f2(y); // vytvoří kopii objektu y // nevytváří kopii, předává konstantní referenci const se dá chápat jako read-only (readonly bylo klíčové slovo v původním Stroustrupově návrhu C with Classes) Situace s předáváním hodnotou vs. předáváním konstantní referencí je v moderní době trochu složitější: moderní překladače umí techniky jako copy elision, return value optimization apod., které mnohá použití volání hodnotou optimalizují. Reference a l-hodnoty/p-hodnoty l-hodnota (l-value) je něco, co může stát na levé straně přiřazení někde to bydlí, má to adresu např. proměnná p-hodnota (r-value) je něco, co může stát na pravé straně přiřazení např. číselná hodnota, dočasný objekt konstantní reference chytá všechno, nekonstantní chytá jen l-hodnoty konstantní reference má proto nižší prioritu u přetěžování (viz níže) v C++11 je situace opět složitější (r-value reference, move semantics) více na speciální přednášce o C++11 koncem semestru void lfun(int & x); void rfun(const int & x); int a = 7; lfun(a); lfun(17); rfun(a); rfun(17); // OK // chyba! 17 není l-hodnota // OK // OK Reference jako návratová hodnota reference je možno i vracet, jsou to l-hodnoty (pokud nejsou konstantní) int & fun(int & x) { x += 17; 4
5 return x; int y = 10; fun(y) = 25; // v tuto chvíli je v y hodnota 25 Reference jako atributy atributem třídy může být i reference jak inicializovat? // takhle to nejde: class Dog { Person & owner; Dog(Person & o) { owner = o; // CHYBA! ; // je třeba použít inicializační sekci konstruktoru: class Dog { Person & owner; Dog(Person & o) : owner(o) { ; toto je jeden z důvodů existence inicializační sekce Konstatní metody na úlohách pro první a druhé cvičení jste si jistě všimli u některých metod klíčového slova const za seznamem parametrů class Person { std::string name; int age; void setage(int a) { age = a; int getage() const { return age; ; 5
6 konstantní metody se zavazují neměnit vnitřní stav objektu (hlídá překladač) úzce souvisí s předáváním objektů konstantní referencí (a samozřejmě i konstantním ukazatelem) void funr(const Person & person) { cout << person.getage(); // OK person.setage(18); // chyba! void funp(const Person * person) { if (person) { cout << person->getage(); person->setage(42); // OK // chyba! rozumný styl programování: označovat jako const všechny metody, které nehodlají měnit vnitřní stav objektu vyšší bezpečnost nemůžeme omylem změnit stav objektu, překladač zahlásí chybu obecně (snad znáte už z C): používat const všude, kde je to možné Přetěžování funkcí Přetěžování (overloading) už jsme vlastně viděli minule u konstruktorů možnost vytvořit několik různých funkcí/metod se stejným jménem, ale různou implementací musí se lišit typem nebo počtem parametrů void f(int x) { cout << "f s parametrem int: " << x << endl; void f() { cout << "f bez parametrů" << endl; void f(double d) { cout << "f s parametrem double: " << d << endl; f(3); // zavolá void f(int) f(5.0); // zavolí void f(double) f(); // zavolá void f() 6
7 pozor! nestačí, pokud se liší pouze návratovým typem; proč? void f(int x) { /*... */ int f(int x) { /*... */ // CHYBA! stejně jako funkce se mohou přetěžovat i metody tříd metody se mohou lišit i jen specifikátorem const (uvidíme příště u přetíženého operátoru []) class File { void write(int num); void write(std::string str); ; to, která funkce/metoda se má zavolat, se rozhoduje při překladu podle typů skutečných parametrů Pro zvídavé: Jak to ve skutečnosti funguje? překladač C++ mění jména funkcí, přidává k nim typy parametrů tzv. name mangling není žádný standard, závisí na konkrétním překladači příklad (gcc): jméno funkce void fun(int, char) se interně změní na _Z3funic, jméno funkce int fun(int &) se změní na _Z3funRi Přetěžování a reference pokud máme funkci přetíženou pro nekonstantní a konstantní referenci, nekonstantní má přednost void f(int &); void f(const int &); int x; f(x); // zavolá se první funkce f(5); // zavolá se druhá funkce int & ref = x; const int & cref = x; f(ref); // první f(cref); // druhá mít zároveň funkci přetíženou pro referenci a pro základní typ není vhodné; překladač si bude stěžovat na nejednoznačnost 7
8 void f(int &); void f(int); int x; f(x); // chyba při překladu f(5); // OK, zavolá se druhá funkce Přetěžování a NULL podívejme se, co se stane v C++03, pokud budeme mít funkci přetíženou pro int a ukazatel void f(int x); void f(char * s); f(null); // zavolá se PRVNÍ funkce, NULL je definováno jako 0 proto máme v C++11 speciální ukazatel nullptr f(nullptr); // OK, zavolá se druhá funkce NULL může být v C++11 definováno různě, proto je lépe jej nepoužívat a zvyknout si na používání nullptr Implicitní parametry funkce a metody v C++ (včetně konstruktorů) mohou mít parametry s implicitní hodnotou implicitní parametry musí být nejvíce vpravo v seznamu parametrů void f(int x, int y = 10, int z = 20); f(3, 4, 5); f(3, 4); // zavolá se f(3, 4, 20); f(3); // zavolá se f(3, 10, 20); void g(int x = 10, int y); // chyba! při oddělení deklarace a definice se implicitní hodnoty píšou do deklarace, do definice už ne někde bývá zvykem připomenout implicitní hodnotu v komentáři // v deklaraci není nutné uvádět názvy parametrů void f(int = 10, int = 20); void f(int x /* = 10 */, int y /* = 20 */) { 8
9 Statické atributy a metody položky tříd (atributy a metody), které jsme dosud viděli, patřily objektům (instancím třídy) statické položky třídy: uvozeny klíčovým slovem static patří třídě samotné; nepatří žádnému objektu objekty k nim mohou přistupovat class Person { std::string name; int age; static int count; Person(std::string n, int a) : name(n), age(a) { ++count; static int getcount { return count; ; // inicializace statických atributů mimo deklaraci třídy int Person::count = 0; Person franta("franta", 20); Person pepa("pepa", 21); Person jimmy("james Bond", 25); // volání statické metody, bez konkrétního objektu cout << Person::getCount() << endl; // vypíše 3 příklad použití statických atributů: automatické přidělování ID class Thing { int id; static int id_generator; Thing() : id(id_generator++) { int getid() const { return id; ; int Thing::id_generator = 0; 9
10 Thing t1; Thing t2; Thing t3; t3.getid(); // vrátí 2 Dědičnost a kompozice minule jsme se začali bavit o dědičnosti v OOP a její realizaci v C++, teď se o ní budeme bavit podrobněji Motivace pro dědičnost: Rozhraní chceme psát kód, který využívá tiskárnu budeme psát speciální kód pro každý typ tiskárny? chceme využívat rozhraní (interface) při návrhu rozhraní chceme zachytit, co všechno musí umět třída, aby se mohla vydávat za příslušníka dané skupiny např. tiskárna musí umět přijmout dokument k tisku a vypsat aktuálně tisknuté dokumenty za tiskárnu se ale klidně může vydávat i něco jiného (PDF writer) // interface (čistě abstraktní třída bez atributů) class IPrinter { virtual std::string GetPendingDocuments() const = 0; virtual void PrintDocument(const string & document) = 0; virtual ~IPrinter() { ; // konkrétní třída class HPLaserJet : public IPrinter { HPLaserJet(); std::string GetPendingDocuments() const; void PrintDocument(const string & document); ~HPLaserJet(); ; void HPLaserJet::PrintDocument(const string & document) { můžeme psát kód využívající rozhraní IPrinter, aniž bychom něco tušili o tom, jakou konkrétní tiskárnou cílový systém disponuje 10
11 IPrinter * printer = new HPLaserJet(); printer->printdocument("top_secret.txt"); delete printer; pozn. o operátorech new a delete, které zajišťují dynamickou alokaci v C++, si řekneme příště Motivace pro dědičnost: Hierarchie abstrakce inkoustové a laserové tiskárny se od sebe liší, uvnitř těchto skupin je ale mnoho vlastností společných class InkPrinter : public IPrinter { ; class LaserPrinter : public IPrinter { ; class HPLaserJet : public LaserPrinter { ; Dědičnost nástroj pro podporu abstrakce potomci dodržují rozhraní definované předkem, mohou ale měnit chování (implementaci) omezuje duplicity v kódu Dědičnost v C++ třída může dědit od jedné nebo více tříd specifikátory přístupových práv zděděné položky dědí práva od předka protected: veřejné zděděné položky se měni na protected private: všechny zděděné položky se mění na private bez specifikátoru: u class jako private, u struct jako public virtual: lze kombinovat s jedním z předchozích, řeší problémy s vícenásobnou dědičností (viz později) class A { // veřejné, vidí všichni int x; // normálně se pro atributy nepoužívá // zde jen pro ilustraci protected: // vidí potomci 11
12 int y; private: // soukromé, vidí jen instance třídy A int z; ; class B : public A { // x je public // y je protected // z zde není přístupné ; class C : protected A { // x je protected // y je protected // z zde není přístupné ; class D : private A { // x je private // y je private // z zde není přístupné ; class E : public D { // žádné z x, y, z zde není přístupné ; nejběžnější specifikátor je public, ostatní typy dědičnosti mají omezené použití a v tomto předmětu se s nimi nesetkáte (nicméně je dobré o nic vědět, kdybyste je náhodou někdy potkali tam venku ) Dědičnost a reference z minula už víme, že ukazateli na předka můžeme předat potomka podobně to funguje i s referencemi class Animal { ; class Dog : public Animal { ; class Person { void playwith(const Animal & animal); 12
13 ; // můžeme psát Person tommy; Dog lassie; tommy.playwith(lassie); Časná a pozdní vazba v C++ je implicitní časná vazba: metoda, která se má zavolat, je určena staticky (při kompilaci) class Animal { void makesound() const { std::cout << "<generic animal sound>\n"; ; class Dog : public Animal { void makesound() const { std::cout << "Whoof!\n"; ; Dog lassie; Animal & refanimal = lassie; Animal * ptranimal = &lassie; lassie.makesound(); // "Whoof!" refanimal.makesound(); // "<generic animal sound>" ptranimal->makesound(); // "<generic animal sound>" můžeme přikázat pozdní vazbu: metoda, která se má zavolat, je pak určena dynamicky (za běhu programu) class Animal { virtual void makesound() const { // metoda makesound je virtuální std::cout << "<generic animal sound>\n"; ; 13
14 class Dog : public Animal { // zde může i nemusí být slovo virtual // metoda makesound je každopádně stále virtuální // (není způsob, jak přestat být virtuální) void makesound() const { std::cout << "Whoof!\n"; ; Dog lassie; Animal & refanimal = lassie; Animal * ptranimal = &lassie; lassie.makesound(); // "Whoof!" refanimal.makesound(); // "Whoof!" ptranimal->makesound(); // "Whoof!" pozor při předefinovávání metod: typ předefinované metody musí být úplně stejný, včetně případného const class Animal { virtual void makesound() const { std::cout << "<generic animal sound>\n"; ; class Dog : public Animal { // zde jsme vytvořili NOVOU virtuální metodu // která skrývá metodu void Dog::makeSound() const virtual void makesound() { std::cout << "Whoof!\n"; ; Dog lassie; Animal & refanimal = lassie; Animal * ptranimal = &lassie; lassie.makesound(); // "Whoof!" refanimal.makesound(); // "<generic animal sound>" ptranimal->makesound(); // "<generic animal sound>" rozdíl mezi časnou a pozdní vazbou z hlediska rychlosti 14
15 časná vazba je statická a proto rychlejší pozdní vazba vyžaduje nahlédnutí do tabulky virtuálních funkcí a je proto pomalejší Přetěžování, předefinování, skrývání (overloading, overriding, hiding) přetěžování je deklarace několika metod se stejným názvem a různými parametry předefinování je nahrazení definice virtuální metody ve třídě předka novou definicí ve třídě potomka ke skrývání dochází, pokud je v potomkovi deklarovaná metoda stejného jména jako v předkovi (a buď není virtuální nebo má jiné parametry, případně se liší kvalifikátorem const) class Account { virtual void deposit(double amount); virtual std::string tostring() const; virtual std::string tostring(char delim) const; ; class InsecureAccount : public Account { virtual void deposit(double amount, Date date); virtual std::string tostring() const; ; ve výše uvedenm příkladu: metoda tostring ve třídě Account je přetížená metoda tostring() ve třídě InsecureAccount předefinovává metodu tostring() ve třídě Account a zároveň skrývá metodu tostring(char) ze třídy Account metoda deposit(double, Date) ve třídě InsecureAccount skrývá metodu deposit(double) ze třídy Account InsecureAccount iacc; Account & refacc = iacc; iacc.deposit(3.50); // chyba! refacc.deposit(3.50); // OK, volá se Account::deposit(double) string s = refacc.tostring(); // OK, volá se InsecureAccount::toString() s = iacc.tostring(','); // chyba! 15
16 jak zabránit skrytí metody tostring(char)? class InsecureAccount : Account { using Account::toString; ; Specifikátory final a override zavedeny v C++11 override umožňuje explicitně sdělit, že zamýšlíme metodu předefinovat překladač pohlídá, že typ metody sedí a že je virtuální class Animal { virtual void makesound() const { std::cout << "<generic animal sound>\n"; ; class Dog : public Animal { void makesound() override { // chyba při překladu std::cout << "Whoof!\n"; ; final umožnuje explicitně sdělit, že daná virtuální metoda už nesmí být v potomcích předefinována class A { virtual void f() final; ; class B : public A { void f(); // chyba při překladu ; final je možno rovněž použít u třídy; znamená pak, že od dané třídy se nesmí dědit class A { /*... */ ; 16
17 class B final : public A { /*... */ ; class C : public B { /*... */ ; // chyba při překladu Doporučení pro virtuální metody: rozmyslete si, zda má být daná metoda virtuální bude se od dané třídy dědit? je metoda určena k tomu, aby ji potomci předefinovali? pokud ano, pak: v předkovi pište virtual v potomcích můžete a nemusíte psát virtual, je ale vhodné psát override (ušetří vám to spoustu problémů) Abstraktní třídy, rozhraní abstraktní třída je třída, která má alespoň jednu čistě virtuální metodu čistě virtuální metody se zapisují speciální syntaxí = 0 class Abstract { virtual void method() = 0; virtual ~Abstract() { ; nelze vytvářet instance abstraktní třídy čistě abstraktní třída: všechny metody jsou čistě virtuální (s případnou výjimkou destruktoru) čistě abstraktní třídě bez atributů se také říká rozhraní (interface) deklaruje pouze metody, které bude možno volat nenutí svým potomkům nic jiného Vícenásobná dědičnost kontroverzní, výhody i nevýhody použití v případech, kdy jeden objekt má více charakteristik časté použití spolu s rozhraními (interfaces) př. kopírka může být používána zároveň jako tiskárna i skener class IPrinter { /*... */ ; class IScanner { /*... */ ; class Copier : public IPrinter, public IScanner { /*... */ ; pokud se jednotliví předkové funkčně nepřekrývají, nemusí dojít k problémům 17
18 class Animal { /*... */ ; class FlyingAnimal : public Animal { /*... */ ; class Mammal : public Animal { /*... */ ; class Bat : public Mammal, public FlyingAnimal { /*... */ ; co když FlyingAnimal i Mammal předefinovávají nějakou metodu z třídy Animal a Bat ji nepředefinuje? co když Animal obsahuje nějaké atributy? Problém diamantu situace, kdy B a C dědí od A, D dědí od B a C D v sobě obsahuje A dvakrát D / \ B C A A objekty potomka v sobě ve skutečnosti obsahují předka, nějak takto: objekt A: [atributy A] objekt B: [atributy A atributy B] objekt C: [atributy A atributy C] objekt D: [atr. A atr. B atr. A atr. C atr. D] ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ zděděno od B zděděno od C class Animal { int weight; int getweight() const { return weight; ; FlyingAnimal, Mammal, Bat jako výše... Bat thebat; thebat.getweight(); // CHYBA! není jasné, která getweight() se má volat Animal * animal = &thebat; // CHYBA! není jasné, jak přetypovat řešení: virtuální dědičnost 18
19 class FlyingAnimal : virtual public Animal { /*... */ ; class Mammal : virtual public Animal { /*... */ ; pokud B i C dědí od A virtuálně, pak neobsahují A, ale speciální ukazatel na atributy A objekt A: [atributy A] objekt B: [atributy B ukazatel na A atributy A] \ ^ objekt C: [atributy C ukazatel na A atributy A] \ ^ objekt D: [atr. B atr. C atr. D uk. na A atr. A] \------^ použitím virtuální dědičnosti už má hierarchie tvar diamantu A / \ B C \ / D nevýhody virtuální dědičnosti všichni potomci A musí A inicializovat přetypování je složitější a pomalejší to, že umíme problém diamantu řešit pomocí virtuální dědičnosti ještě neznamená, že bych ji měli všude používat; často je mnohem vhodnější řešit problém změnou hierarchie nebo použitím kompozice místo dědičnosti Kompozice alternativa k (vícenásobné) dědičnosti dědičnost je vztah IS-A (Student is a Person.) potomek má všechny vnější vlastnosti předka potomka je možno přetypovat na předka (na studenta je možno se dívat jako na osobu) kompozice je vztah HAS-A (Laptop has a CPU.) třída může mít jako atribut další třídu (hodnotou, referencí, ukazatelem) třída může mít i víc tříd jako atributy třída tím obsahuje všechny vlastnosti těchto tříd ale není jejich potomkem, nemůže je zastoupit (notebook obsahuje CPU a RAM, ale není možno se na něj dívat jako na CPU nebo jako na RAM) 19
20 // dědičnost, v tomto případě spíš nevhodná class Laptop : public CPU, public RAM { ; // kompozice class Laptop { CPU m_cpu; RAM m_ram; Laptop(unsigned cpufreq, unsigned ramsize) : m_cpu(cpufreq), m_ram(ramsize) { unsigned getcpufreq() const { return m_cpu.getcpufreq(); unsigned getramsize() const { return m_ram.getramsize(); vhodnost použití kompozice a dědičnosti obecně spíše preferovat kompozici dědičnost tam, kde to dává smysl kompozice může být kódově rozsáhlejší možná i kombinace obou přístupů 20
PB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Reference, const Přetěžování funkcí Statické atributy a metody Dědičnost a kompozice Nikola Beneš 5. října 2015 PB161 přednáška 3: reference, const, přetěžování,
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ícePB161 Programování v jazyce C++ Přednáška 2
PB161 Programování v jazyce C++ Přednáška 2 Základy objektů Reference, const Nikola Beneš 25. září 2018 PB161 přednáška 2: objekty, reference, const 25. září 2018 1 / 30 Jak funguje std::vector? (pro zvídavé)
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í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í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++ 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í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í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í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ícePB161 Programování v jazyce C++ Přednáška 2
PB161 Programování v jazyce C++ Přednáška 2 Základy objektů Reference, const Testování Nikola Beneš 25. září 2017 PB161 přednáška 2: objekty, reference, const, testování 25. září 2017 1 / 35 Jak funguje
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í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ícePB161 Základy OOP. Tomáš Brukner
PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250
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í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íce11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9
Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií
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í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í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í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ícePB161 Programování v jazyce C++ Přednáška 1
.. PB161 Programování v jazyce C++ Přednáška 1 Organizace Úvod do OOP v C++ Nikola Beneš 21. září 2015 PB161 přednáška 1: organizace, úvod do OOP v C++ 21. září 2015 1 / 39 Cíle předmětu 1. vysvětlit základy
VíceÚ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íceNPRG031 Programování II 1 / :25:46
NPRG031 Programování II 1 / 26 28. 2. 2018 11:25:46 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty
VíceNMIN201 Objektově orientované programování 1 / :36:09
NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat
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í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íceTřídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.
23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,
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íceJazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Úvod Metody s časnou vazbou jsou překládány jako obyčejné céčkovské funkce. Této metodě je předán jako první implicitní parametr this. Rozdíl mezi obyčejnou
VícePrincipy OOP - rozhraní, dědičnost PB161
Principy OOP - rozhraní, dědičnost 1 Principy OOP - Dědičnost, rozhraní 29.9.2014 Co nás dnes čeká Motivace pro a realizace rozhraní Dědičnost a kompozice Operátor reference & 2 Principy OOP - Dědičnost,
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íceProgramování II. Polymorfismus
Programování II Polymorfismus Osnova přednášky Vztah přetížení, překrytí a protected přístupu. Co je polymorfismus? Příklad. Přetížení, překrytí, protected Přetížení x překrytí Přetížením řešíme doplnění
VícePRINCIPY OOP, DĚDIČNOST. PB161 Principy OOP - Zapouzdření 30.9.2013
PRINCIPY OOP, DĚDIČNOST 1 CO NÁS DNES ČEKÁ Operátor reference & Dědičnost a kompozice Kopírovací konstruktory, destruktory std::string 2 3 OPERÁTOR REFERENCE & REFERENCE NA PROMĚNNOU Alternativní jméno
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í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í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íceDefinice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
VíceIRAE 07/08 Přednáška č. 1
Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní
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íce11 Diagram tříd, asociace, dědičnost, abstraktní třídy
11 Diagram tříd, asociace, dědičnost, abstraktní třídy 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 diagramům tříd, asociaci,
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ícetypová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
VíceIRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33
Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt
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í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í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# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na
VícePB přednáška (21. září 2015)
PB161 1. přednáška (21. září 2015) Cíle předmětu 1. vysvětlit základy OOP 2. seznámit s možnostmi jazyka C++ 3. (zavést a) podpořit praktické programátorské schopnosti 4. nadchnout do (nebo alespoň neodradit
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í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í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íceTeoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
VíceZapouzdření. Tomáš Pitner, upravil Marek Šabo
Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou
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í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íce24. listopadu 2013, Brno Připravil: David Procházka
24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory
VícePB přednáška (12. října 2015)
PB161 3. přednáška (12. října 2015) Poznámky k domácímu úkolu Dynamická alokace Statická vs. dynamická alokace statická alokace na zásobníku (stack) deklarace uvnitř bloku (lokální proměnné) automatické
VícePB161 Programování v jazyce C++ Přednáška 8
PB161 Programování v jazyce C++ Přednáška 8 Dědičnost Návrhové principy v OOP Nikola Beneš 13. listopadu 2018 PB161 přednáška 8: dědičnost, návrhové principy 13. listopadu 2018 1 / 30 Dědičnost PB161 přednáška
VíceDědičnost (inheritance)
Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)
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íceObjekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.
Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru
VíceProgramování II. Návrh programu II
Programování II Návrh programu II Osnova přednášky Dědičnost shrnutí. Návrh programu s využitím dědičnosti Dědičnost shrnutí Klíčové otázky CO je dědičnost? PROČ použít dědičnost? KDY použít dědičnost?
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í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ícePB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Jmenné prostory Výjimky podrobně Nikola Beneš 20. listopadu 2018 PB161 přednáška 9: jmenné prostory, výjimky 20. listopadu 2018 1 / 32 Jmenné prostory PB161
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í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í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 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íceZáklady objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
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í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í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íce20. Projekt Domácí mediotéka
Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý
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íceProgramování II. Abstraktní třída Vícenásobná dědičnost 2018/19
Programování II Abstraktní třída Vícenásobná dědičnost 2018/19 Osnova přednášky Polymorfismus - důsledky. Abstraktní třída. Vícenásobná dědičnost. Polymorfismus - důsledky Polymorfismus Polymorfismus je
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íceDefinice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
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íce4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ
4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve
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í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í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 9
PB161 Programování v jazyce C++ Přednáška 9 Jmenné prostory Výjimky podrobně Nikola Beneš 20. listopadu 2018 PB161 přednáška 9: jmenné prostory, výjimky 20. listopadu 2018 1 / 32 Jmenné prostory PB161
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íceUkazka 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í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í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í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íceBridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
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í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í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í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í 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í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í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íce