Rychlokurs jazyka C++
|
|
- Jiří Martin Bláha
- před 8 lety
- Počet zobrazení:
Transkript
1 Rychlokurs jazyka C++ tento článek má sloužit jako stručný přehled jazyka C++, a má umožnit pohled na problematiku před jejím důkladným studováním aby při něm byly zřejmé souvislosti. Jedná se pouze o schematické uvedení nejvýznamnějších vlastností, tak aby byl při podrobném studiu zřejmější kontext učené látky. Rozsah je zhruba to co zůstane po prvním letmém přečtení tlustých knih. Jsou uvedeny pouze základní vlastnosti a vazby (ve skutečnosti je to složitější). Je použita lehčí (lidštější a proto ne zcela přesná) terminologie. hlavně stručně je zaveden nový typ jednořádkového komentáře od dvojznaku // do konce řádky // tady je komentář neinicializovaná proměnná je špatná (nebezpečná) proměnná snaha o to aby proměnná měla vždy smysluplnou hodnotu vede k tomu, aby bylo možno proměnnou nadefinovat až v okamžiku, kdy je možné jí přiřadit smysluplnou hodnotu to je nadefinovat kdekoli. (na rozdíl od C, kdy je možné definovat pouze na začátku bloku). { int i = 0; i ++; float j = Pracuj(i); // definice proměnné uprostřed bloku říkáme mu jinak ale je to ten samý (starý) je zaveden nový způsob pro předávání proměnných reference. Pomocí reference získáme nové (druhé, další) pojmenování stávající proměnné. int a, b, c; // definice proměnných v základní funkci příprava pro volání funkce(a,&b,c); // volání funkce // a prototyp funkce vypadá tak void funkce (int aa, int * bb, int &cc) // předání hodnotou proměnná aa má stejnou hodnotu jako a ale je to // lokální proměnná, změna aa se na originálním a neprojeví // předání hodnotou ukazatele (adresou) proměnná bb je adresa na které se nachází hodnota b, manipulací s // hodnotou na této adrese pracujeme s proměnnou b // předání odkazem (referencí) hodnota cc je reference (přezdívka, jiné jméno) pro proměnnou c. manipulace // s proměnnou cc je totéž jako práce s původní hodnotou (tj. s proměnnou c) {
2 aa = 10; // mění se pouze hodnota proměnné aa, hodnota proměnné a v původní funkci se nemění *bb = 10; // pomocí práce s adresou je možné pracovat s hodnotou proměnné, která zde leží proměnnou b // adresu je nutné dereferencovat pomocí operátoru pro přístup k hodnotě na adrese * cc = 10; // jelikož je cc pouze jiné jméno pro c, projeví se změna i na původní proměnné, je to stejné jako c=10 // v případě volání funkce (d,&e,f) je nutno v komentářích ve funkci vyměnit a za d, b za e, c za f double &rd = pole[i].data[j].hodnota[k]; // reference pro zjednodušení složitého přístupu k proměnné // reference musí být inicializována neexistují dvě stejně pojmenované funkce platí v C neexistují dvě stejné funkce platí v C++ Nyní je možné stejně pojmenovat dvě a více funkcí, pokud mezi nimi lze rozlišit na základě typu nebo počtu parametrů tento jev se nazývá přetížení funkcí. Následující funkce lze odlišit při volání přesnými parametry: funkce (int) funkce (int, float) funkce(char) funkce(float, char) nelze však odlišit při volání funkce (6.25); // parametr je double. Ten překladač umí // konvertovat na int i char a proto se nemůže rozhodnout funkce ((int)6.25); // nyní už to sedí přesný typ nebudu to vyplňovat když je to furt stejný pokud se dá očekávat, že některý z parametrů funkce bude nabývat stejných hodnot, a pouze výjimečně jiných, potom je možné použít implicitní parametry ve volání funkce. Pokud v hlavičce funkce (v deklaraci) uvedeme u předávané proměnné hodnotu, potom se tato hodnota do proměnné uloží v případě, že ji při volání nepoužijeme. Např. většinou se ve funkci nic netiskne, ale někdy to potřebujeme i s tiskem daného řetězce. fce(int op1,int op2, char *txt=null) // poslední položka je řetězec. Pokud není řetězec zadán, potom je //v proměnné NULL a text se netiskne fce(4,5, vysledek testu ); // jsou zadány všechny parametry, včetně proměnné txt. Protože je txt různá od // NULL text se vytiskne
3 fce(5,6); // poslední parametr není programátorem uveden, ale ve funkci existuje je překladačem nastaven // na hodnotu NULL ať mi do toho nevrtají pokud chceme, aby proměnná nebyla měněna, potom ji označíme klíčovým slovem const. Toho se používá při předávání pomocí referencí, které je rychlé (pro rozsáhlé struktury) ale nebezpečné v tom, že se ve funkci mohou nekontrolovaně změnit. Možnost změny se potlačí uvedením const před proměnnou. Zavedeme-li si pravidlo, že pokud se proměnné ve funkci nemění, pak je označena const, potom z pohledu na hlavičku funkce vždy víme, zda se proměnná uvnitř změní a můžeme se podle toho zachovat. fce (TRIDA const &promenna) // promenna se dá ve funkci použít, ale nejde měnit její parametry. Nelze zavolat // ani funkci, která by proměnnou mohla změnit potřebuji hodně dat (paměti) dynamická alokace je možná pomocí operátorů new a delete. Nový typ alokace umožňuje naalokovat paměť pro daný typ, nebo pole daného typu. Jelikož je znám typ, pro který je paměť vytvářena a také počet proměnných, lze provést inicializaci a zrušení (konstruktory a destruktory z objektově orientovaného programování). TRIDA *prom = new TRIDA; // vytvoření jedné proměnné, s inicializací (libovolným) konstruktorem delete prom; // zrušení jedné proměnné, s úklidem destruktorem TRIDA *prom = new TRIDA[kolik]; // vytvoření pole proměnných, s inicializací (implicitními) konstruktory delete[ ] prom; // zrušení pole proměnných, s úklidem všech proměnných destruktory kdo šetří (ten plýtvá) pokud mám jednoduché funkce, je možné je použít tak, aby se nevolaly jako funkce ale provedly se přímo na daném místě. Ušetříme tedy funkční volání (práci se zásobníkem), ale prodloužíme kód -> hodí se pro jednoduché a krátké funkce (bez cyklů, bez volání funkcí ). Napsaná funkce je prakticky předpis (jako makro v C), podle kterého se v daném místě vytvoří kód -> lze ji uvádět v hlavičkovém souboru. inline int secti(a,b) {return a+b; // jednoduchá funkce, která bude pouze rozvinuta a nebude se volat c = secti(d,e); // zde se prakticky provede c = d + e; podle předpisu pro definici funkce, funkce se nezavolá
4 má to logiku je zaveden nový typ pro logické proměnné. Jmenuje se bool a proměnné nabývají hodnot true a false. (Dříve to byly hodnoty 0 a 1, ještě dříve 0 a nenula (tj. cokoli jiného) tyto staré lze stále použít (zpětná kompatibilita). bool hodnota= a > b; // uloží se true nebo false podle hodnoty return true; // použití konstanty typu bool operátorujte s vlastními typy je možné napsat operátor pro vlastní typ. Operátor je vlastně speciálně pojmenovaná funkce, pro kterou existuje zkrácené volání. Překladač volá operátory podle kontextu. bool operator>(komplex &a, double b) {return ((a.real*a.real+a.imag*a.imag) >b*b); // srovnání komplexních čísel s doublem podle velikosti KOMPLEX c; double d; if (c>d) // můžu použít operátor i pro nově vytvořený typ (strukturu) zkrácená verze if (operator>(c,d)).. // plná verze stejného volání tam a zpět C++ zavádí nový typ vstupu a výstupu. Díky přetěžování operátorů << a >> je možné realizovat vstup a výstup pro dané typy. #include <fstream.h> // příslušná knihovna char a; double b; cout << a << teplota << b << tlak ; // výstup na konzolu proměnných různých typů prokládaných texty // na příkladu je vidět i zřetězení příkazů, které je // možné díky tomu, že operátor vrátí referenci (tedy cout), // který je následně použit pro následující operátor cin >> a >> b; // vstup proměnných různých typů z konzoly každý na svém písečku umožňuje zabalit jednotlivé celky dat a funkcí (např. podle autorů). Balíčky se nazývají prostory jmen (namespace). Pokud chceme použít data z balíčku, musíme ke jménu proměnných či funkcí přidat i příjmení název balíčku. Za takový balíček je možné považovat i třídu či strukturu. namespace Matice { int iii; // tyto funkce a data patří do prostoru matice
5 int fff(int ab) {iii=4; // proměnná je ve stejném prostoru Matice::iii=5; // proměnná je v jiném prostoru using Matice::iii; // zveřejnění proměnné z jiného prostoru iii=5; // používání zveřejněné proměnné všichni kdo patří k sobě mají stejné příjmení příjmení (jméno prostoru) připojujeme před jméno dat pomocí oddělovače ::, kterému říkáme operátor příslušnosti. Matice::Nastav(a,b) ; funkce Nastav z prostoru Matice Vektor::Nastav(a,b); funkce Nastav z prostoru Vektor nebudou spolu kolidovat. Mají stejné jméno ale různé příjmení všechno na jednom místě spojení dat a funkcí, které s nimi pracují do jednoho celku. Možnost vytvořit nový datový typ, který obsahuje data i metody (funkce). class TTT{ float a, b,c ; // data int Nastav(float cc,float dd) { //metoda ; data jsou moc důležitá na to aby k nim byl přístup zavádí se přístupová práva, která říkají, kdo má právo přistupovat k datům a metodám. Data je lepší mít pod kontrolou, proto k nim přistupujeme pomocí metod, která je mohou před zápisem a čtením kontrolovat nebo modifikovat. Každý má přístup pouze přes jednu mez okolí může k veřejným metodám, veřejná metoda může k privátním datům třídy private public globální prostor přístup k private položkám stejné třídy, přístup k public položkám (může i k public jiných tříd) nejlépe když se věci nemění (na pohled zvenčí) ale přitom jsou stále lepší (vnitřně) - Interface zůstává zachován, (vnitřní) implementace se mění. Změna dat na jiný typ (jinou reprezentaci), není zvenčí vidět, protože přístupové funkce data modifikují tak aby to nebylo poznat. Vnitřně tedy dojde ke zlepšení ale způsob použití se nemění.
6 varianta privátní data veřejná data okolí 1 Reálná a imaginární GetReal() {return Reálnou zavoláme GetReal složka složku 2 Amplituda a úhel GetReal() {return Amplitud*cos(uhel) zavoláme GetReal přátelé si mohou dovolit více - pokud třída označí někoho (třídu, funkci) za přítele friend, potom tento má právo přistupovat k privátním datům dané třídy class TTT { int i; friend funkce(ttt &pom); // zde se označí funkce za přítele ; funkce (TTT &pom) { pom.i = 4; // a zde využívá svého privilegia (výjimky) k přístupu k privátním datům třídy s daty je nutné cílevědomě pracovat společně s daty jsou ve třídě také metody funkce, které pracují s daty třídy. Metoda se od funkce liší tím, že je v ní implicitně přítomen prvek (proměnná), která si ji zavolala. class TTT { int Nastav(float cc,float dd) { //metoda ; TTT aa; aa.nastav(3,4); // proměnná aa třídy TTT si zavolá metodu Nastav této třídy uvnitř se všichni jmenují stejně proměnná, která metodu vyvolala je uvnitř metody přístupná přes ukazatel this. Tato proměnná je přítomna implicitně (zařídí překladač). Předávané proměnné fungují jako u normálních funkcí. class TTT { int x,y;
7 int Nastav(float cc,float dd) {this->x = cc; this->y = dd; // this je ukazatel na proměnnou, která // metodu vyvolala. tj. nejprve aa a potom bb ; TTT aa,bb; aa.nastav(3,4); // vstupu do Nastav je proměnná aa, která metodu vyvolala přístupná přes this bb.nastav(7,8); // po vstupu do Nastav je proměnná bb, která metodu vyvolala přístupná přes this zrození a smrt (vznik a zánik) nejdůležitější okamžiky v životě speciální metody ovlivňují vznik a zánik objektu. Tyto metody je nutné napsat, ale volá je překladač. Konstruktory zajišťují inicializaci vznik objektu. Destruktor zajišťuje zánik objektu. Je to vlastně speciální metoda. class TTT { int x,y; TTT(void) {this->x=0;this->y=0; // konstruktor má stejný název jako jméno třídy, volá se pro TTT a; TTT(float aa,float bb) {x=aa; y = bb; // konstruktor se dvěma parametry, volá se pro TTT b(3,4); // this není nutné uvádět vyplývá z kontextu TTT(TTT const &bb) {x=bb.x; y = bb.y; // copy konstruktor vytvoří kopii proměnné stejného typu TTT(double ee) { // konverzní konstruktor (má jeden parametr) změní proměnnou double na TTT ~TTT(void) { // destruktor zde se vyřeší zánik objektu ; TTT aa,bb=aa; // volá se konstruktor bez parametrů a kopykonstruktor // překladač vlastně doplní na aa.komplex(), bb.komplex(aa) // (!! programátor to takhle volat nemůže!!) TTT dd (6.7), ff(4,8); // volá se konverzní konstruktor a konstruktor se dvěma parametry "musí to mít hlav(ičk)u" v hlavičce je definice třídy. vše co je zde uvedeno je jen předpis pro tvorbu objektu a jeho vlastností. metody zde uvedené jsou realizovány jako inline. metody, které zde mají pouze hlavičku nejsou inline. tělo mají definováno ve zdrojové části a jsou volány funkčním voláním. ====== trida.h ====== class trida { int x; // v paměti se vyhradí místo až s definicí proměnné static int pocet; // deklarace - nevyhrazuje místo v paměti
8 int metoda1(void) {return 1; // má tělíčko v definici třídy - // inline metoda inline int metoda2 (void) ; // nemá tělíčko, ale je označena // jako inline - tento zápis vede ke zpřehlednění hlavičky // nepletou se tělíčka do prototypů funkcí int metoda3(void); // není označeno inline ani nemá tělíčko // funkční volání int trida::metoda2(void){return 2; // je to inline, definuje // se v hlavičce je mimo třídu, proto zde musí být plné jméno // metody i s trida:: ===== trida.h konec === ===== trida.cpp ====== #include "trida.h" int trida::pocet=0; // definice statické proměnné s // inicializací zde je vyhrazana pamět pro uložení proměnné int trida::metoda3(void) {return 3; // metoda volaná funkčním // voláním zde se tvoří kod metody v paměti. Je nutné uvést // plné jméno ===== trida.cpp konec ==== ===== pouziti.cpp ===== int main() { trida::pocet ++; // statická prměnná "žije" i bez objeků třídy. je v "globální" paměti trida aaa; // zápis volání je stejný pro všechny případy aaa.metoda1(); // zde je vložen kod na základě předpisu aaa.metoda2(); // zde je vložen kod na základě předpisu aaa.metoda3();// zde je provedeno funkční volání return 0; ===== pouziti.cpp konec ==== konstanta musí být konstantní - konstanta nesmí být změněna. Nelze jí tedy přímo měnit. Nelze ji měnit ani pomocí funkcí / metod. Má-li být metoda použita na konstantní objekt, musí to být metoda označena jako konstantní metoda, která objekt nezmění. Jinak překladač volání nepovolí.
9 T { int i; int Metoda1(void) const {return 1; // nemění objekt int Metoda2(void) {i=0;return 2; // mění objekt const T oo; oo.metoda1() ; // lze použít na konstantní prvek nemění ho oo.metoda2(); // nelze použít na konstantní prvek mění ho vyrobte si operátory - pro tvorbu operátorů se používají speciální metody. Jejich název je dán klíčovým slovem operator a znakem operátoru. To je plné volání. I když toto plné volání lze použit i k volání, většinou se používá zkrácená verze. Operátor má vlastnosti standardního operátor (priorita, počet parametrů ) a měl by se činností blížit jeho významu (operátor + sčítá, spojuje ) tak aby na první pohled bylo jasné co se děje. class T { int a; T& operator=(t const &bb) {this->a = bb.a;return *this; // definice operátoru = // až na speciální jméno s operátor, je to stejné jako // jiné metody. // Má to návratovou hodnotu, název a seznam parametrů // následovaný tělíčkem T c,d,e; c.operator=(d.operator=(e)); // plné volání stejné jako // ostatní (normální) metody // díky návratové hodnotě výsledný prvek se předá ven je // možné zřetězení operátorů =, kdy výsledek jednoho přiřazení // je parametrem dalšího c = d = e; // stejné volání ve zkráceném zápisu směna je základem pokroku - ke změnám typu se používají (konverzní) konstruktory (to jsou konstruktory s jedním parametrem) a přetypování (konverzní operátor). Tyto předpisy se používají ze strany operátora explicitní konverze i překladače implicitní konverze. T{ int a; T(int i) {a=i; // konverze z int na T
10 T(float f){a=f; // konverze z float na T operator double() {return (double)a; // konverzní operátor T a=4, b=3.34; // inicializace proměnné třídy T intem a // floatem je to vlastně změna typu double bb = double(b); // použití konverzního operátoru // přetypování bez práce koláče získáme děděním dědění je mechanizmus, kdy se vlastnosti jedné třídy použijí jako základ pro jinou třídu. První řádek určuje definici třídy a způsob dědění. Ve třídě A jsou prvku s různými přístupovými právy. Ve zděděných třídách je naznačeno jaká práva mají po dědění. Private není vidět nikdy nutno přistupovat přes metody Get, Set. Protected je možné přistupovat přímo je to pohodlné ale nebezpečné porušení ochrany dat. class A class B:private A class C:protected A class D:public A public a private b protected c private a - private c protected a - protected c public a - protected c Při dědění se nic neztrácí. Lze překrýt. Vyhodnocení je od potomka k bázi. Základní způsoby při dědění class Base { Metoda1(); Metoda2(); Metoda3(); class Dedeni:public Base { Metoda2(); Metoda3() {Base::Metoda3(); Metoda4(); // necháme původní metodu z báze //vytvoříme novou metodu,původní je skrytá // doplníme původní metodu // vytvoříme novou metodu Objekt třídy Dedení má tedy Metodu1 1x, Metoda2 2x, Metoda3 2x a Metoda4 1x. postup volání konstruktorů - konstruktor bázové třídy, konstruktory lokálních proměnných (třídy) v pořadí jak jsou uvedeny v hlavičce, konstruktor (tělo) dané třídy destruktory se volají v opačném pořadí než konstruktory Jelikož objekt se vytváří postupně, je na jeho začátku uložena bázová třída. Všechny třídy, které jsou odvozeny od stejné třídy, mají tedy stejný začátek. Na prvek zděděné třídy se můžeme odkazovat i pomocí (ukazatelů) na jeho předky
11 míchat jablka s hruškama virtuální metody umožňují pracovat společným způsobem s různými třídami, pokud vycházejí ze společného základu. Při klasickém překladu se přímo doplní adresa volané funkce či metody záleží na tom, jak je proměnná definována. U virtuálních metod dochází k postupnému volání, kdy se až za chodu programu zjišťuje adresa metody. Ta se zjistí tak, že se u prvku program za chodu podívá do tabulky virtuálních metod a podle toho odskočí. Tabulka virtuálních metod se přiděluje prvku při vzniku záleží tedy na tom jak objekt vznikl, a ne na tom čemu je aktuálně přiřazen. Pokud různé prvky zděděné z jedné třídy dáme do pole ukazatelů této základní třídy, pak při volání virtuálních metod se volají tyto podle toho jak objekt vznikl (tedy se volají metody příslušné typu) class A { virtual Metoda (){cout << a ; class B:A{ virtual Metoda() {cout << b ; class C:A{ virtual Metoda() {cout << c ; fce () { A* pole[2]; B b; C c; pole [0] = &b; pole [1] = &c; pole[0].metoda(); // tiskne b podle vzniku ne podle toho čemu je přiřazeno pole[1].metoda(); // tiskne c interface Metody (virtuální) bázové třídy jsou společným prvkem, všech tříd zděděných a přitom jsou v nich specializované. Protože jsou společné pro všechny třídy, hovoříme o interface pro danou skupinu tříd jsou to metody, které najdeme u všech těchto tříd a můžeme s nimi zacházet společně = stejně. nepoužitelný interface pokud virtuální metody v bázové třídě nemají tělíčka, hovoříme o abstraktní bázové třídě. Nejde vytvořit její objekt. Slouží pouze jako definice interface.
12 kolikrát zdědíš, tolikrát Je možné dědit i z více tříd najednou. Pokud má více předků stejně pojmenovaná data, je nutné pomocí operátoru příslušnosti určit, která máme na mysli např. BA::a, BB::a proměnná a, která patří k bázové třídě BA, nebo BB. Nelze dědit na jedné úrovni dvakrát z jedné třídy. Je možné ale zdědit jednu třídu ve více předcích. pište to přes kopírák Užitečným nástrojem je mechanizmus šablon. Šablona je předpis=návod (a proto je v hlavičkovém souboru) na základě kterého si překladač napíše metody nebo třídy podle potřeby. Programátor napíše funkci nebo třídu s obecným typem a v případě nutnosti si překladač (nebo programátor) určí konkrétní typ na jeho základě podle předpisu (šablony) si překladač napíše vše sám. Napíše se to tedy pro jeden obecný typ a překladač si potřebné pro (libovolné) konkrétní typy napíše sám. template < typename T > double max ( T h1, T h2 ) {return h1>h2?h1:h2; T značí onen obecný typ. Při volání (se dvěma parametry shodného typu) si překladač vytáhne tento typ, dosadí ho za T a napíše si příslušnou verzi funkce. Toto dokáže pro všechny typy. Problémem je, že to nedokáže pro parametry různých typů. template < class T, class S > double max ( T h1, S h2 ) {return h1>h2?h1:h2; Starší zápis s označením obecných typů pomocí class a ne typename. Nyní si překladač vytvoří funkci i pro různé parametry. Třída pomocí šablony (opět pouze předpis s obecným typem) template < typename T > class A { T a, b ; // za T se dosadí až při konkrétním použití T fce ( double, T, int ) T A<class T>:: fce (double a, T b,int c) { potom A <double> c, d; // označení konkrétního typu musí být při definici bude c,d třídy A, kde a,b jsou double A <int> g, h; bude g,h třídy A, kde a,b jsou int, Tučně jsou vyznačeny názvy typu jsou to tedy dva různé typy A<double> a A<int>
13 chyby řešíme výjimečně nový mechanizmus ošetření chyb se nazývá výjimka. Tento mechanizmus spočívá v tom, že chyby se většinou neřeší v místě kde vznikly (zanořený výpočet v knihovně), ale někde v uživatelské části programu. Proto se chyba neřeší ale vypustí se objekt = výjimka. Následně se ukončují metody a funkce (včetně destruktorů objektů) až do doby, než výjimku chytíme. chytat můžeme pouze v označeném bloku. try { volání funkce, která hodí výjimku pomocí throw catch(x:v) {zde je řešení pro výjimku X:V catch (X:V2) {zde je řešení pro výjimku X:V Přetypování / RTTI Informace o typu za běhu programu Standardní knihovny C v C++...
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální
Virtuá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í
konstruktory a destruktory (o)
konstruktory a destruktory (o) - slouží k ovlivnění vzniku (inicializace) a zániku (úklid) objektu - základní myšlenkou je, že proměnná by měla být inicializována (nastavena do počátečního stavu) a zároveň
Programování v jazyce C a C++
Programování v jazyce C a C++ Příklad na tvorbu třídy Richter 1 4. prosince 2017 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno Dvourozměrné pole pomocí tříd Zadání Navrhněte a napište třídu pro realizace
Programování v jazyce C a C++
Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu
Dědění, polymorfismus
Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá
Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března
Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem
Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
Objektové 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
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
Programování v C++ 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
Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný
Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE
PB161 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
PB161 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
2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
Programování v C++ 1, 6. cvičení
Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Jazyk C++ I. Šablony 2
Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()
Programování v C++ 2, 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
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
NMIN201 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
int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N
Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Zá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č
Teoretické 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
NPRG031 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
Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března
Dědičnost Cíle lekce Cílem lekce je naučit se pracovat a využívat dědičnosti při návrhu a tvorbě programů. Lekce je zaměřena hlavně na jednoduchou dědičnost. Bude rovněž vysvětlen rozdíl mezi dědičností
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné
Mělká a hluboká kopie
Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
Chování konstruktorů a destruktorů při dědění
Dědičnost V objektově orientovaném programování je dědičnost způsob, jak vytvořit novou třídu použitím již existujících definic jiných tříd. Takto vytvořené třídy přebírají vlastnosti a metody svého předka
Ú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
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19
C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,
TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);
TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20
IB111 Programování a algoritmizace. Objektově orientované programování (OOP)
IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Jazyk C++ 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
Jazyk C++, některá rozšíření oproti C
Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra
Programová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í
Jazyk 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&
Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz
Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena
Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0
Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 int policko[100]; // tj. pole je od 0 do 99!!! policko[5] = 7; // pozor je to 6. prvek s indexem 5
Programování v C++ 1, 1. cvičení
Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených
<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016
ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce
typová 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
Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -
Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Preprocesor je možné ovládat pomocí příkazů - řádky začínající
Sprá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
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:
21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c)
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých
IRAE 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í
Koncepce (větších) programů. Základy programování 2 Tomáš Kühr
Koncepce (větších) programů Základy programování 2 Tomáš Kühr Parametry a návratová hodnota main Již víme, že main je funkce A také tušíme, že je trochu jiná než ostatní funkce v programu Funkce main je
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
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
Funkční objekty v C++.
Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční
Abstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství
Přetěžování operátorů
Přetěžování operátorů 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
24. listopadu 2013, Brno Připravil: David Procházka
24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Dynamická alokace Kopírovací konstruktor Přetypování v C++ Nikola Beneš 12. října 2015 PB161 přednáška 4: dynamická alokace, kopírovací konstruktor, casting
Programování v C++ VI
Programování v C++ VI Konstruktory, destruktory a dědičnost Konstruktory a dědičnost I když jsme se bavili o dědičnosti, trochu jsme zapomněli na konstruktory to se ale nevyplácí, vzpomeňte si, jak důležitý
1. 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ář
Zá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
Jazyk 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
Objektově orientované programování. Úvod
Objektově orientované programování Úvod Imperativní programovací styl klasický programovací styl používaný v době vzniku prvních vyšších programovacích jazyků těžiště programování je v tvorbě algoritmů
Programování II. Návrh programu I 2018/19
Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,
PB161 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]()?
dovolují dělení velkých úloh na menší = dekompozice
Podprogramy dovolují dělení velkých úloh na menší = dekompozice Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PROGRAMOVÁ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Í:
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
Programování v C++ 2, 7. cvičení
Programování v C++ 2, 7. cvičení spojový seznam 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky Dědění
OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů... 8-1 8.2 Standardně zavedené proudy... 8-1 8.
David MATOUŠEK OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PØÍKLADECH Praha 2011 David Matoušek Objektové programování v C++ v pøíkladech Lektoroval Ing. Bohumil Brtník, Ph.D. Bez pøedchozího písemného svolení nakladatelství
Základy C++ I. Jan Hnilica Počítačové modelování 18
Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program
ZPRO v "C" Ing. Vít Hanousek. verze 0.3
verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout
1. Programování proti rozhraní
1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní
Jazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?
PB161 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
IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje
Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti
Programovací jazyk Pascal
Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce
Programování v C++ 2, 8. cvičení
Programování v C++ 2, 8. cvičení návrhový vzor iterátor 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky
Zpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 10. Objektově orientované programování v C++. Přetěţování operátorů, generické funkce a třídy, výjimky, knihovny. (A7B36PJC) Obsah OOP v C++... 2 Pro připomenutí - Základní
11 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,
Pole 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ě
Základy programování (IZP)
Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
IRAE 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