Fejlett programozási nyelvek C++

Hasonló dokumentumok
Fejlett programozási nyelvek C++ Iterátorok

C++ Standard Template Library (STL)

Bevezetés a programozásba 2

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

1.AA MEGOLDÓ BERCI AA 1.

Pénzügyi algoritmusok

Felhasználó által definiált adattípus

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Pénzügyi algoritmusok

GTL Graphical Template Library

Challenge Accepted:C++ Standard Template Library

500. CC Megoldó Alfréd CC 500.

503.AA Megoldo Arisztid 503.A

A C++ Standard Template Library rövid összefoglalás

Collections. Összetett adatstruktúrák

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

500.AA Megoldo Arisztid 500.A

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

C#, OOP. Osztályok tervezése C#-ban

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

117. AA Megoldó Alfréd AA 117.

.AA Megoldó Alfréd AA.

Programozási nyelvek JAVA EA+GY 1. gyakolat

500.AJ Megoldó Magyar Magdolna 500.J

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

128. AA Megoldó Alfréd AA 128.

Programozás. C++ típusok, operátorok. Fodor Attila

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Generikus Típusok, Kollekciók

500.AA Megoldó Kulcsár 500.A

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

500. DD Megoldó Alfréd DD 500.

Bevezetés, a C++ osztályok. Pere László

500. AA Megoldó Alfréd AA 500.

Bevezetés a programozásba Előadás: A const

Alprogramok, paraméterátadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Globális operátor overloading

Programozási nyelvek Java

feladat pont min elért

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Kivételek, kivételkezelés a C++ nyelvben

1. Bevezetés A C++ nem objektumorientált újdonságai 3

228. AA Default Konstruktor AA 228.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozási nyelvek Java

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa

ISA szimulátor objektum-orientált modell (C++)

111. AA Megoldó Alfréd AA 111.

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozás II gyakorlat. 8. Operátor túlterhelés

1000.AA Megoldo Alfréd 1000.A

Algoritmizálás és adatmodellezés tanítása 1. előadás

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

Programozás módszertan

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Modern rendszerprogramozási nyelvek

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

C++ Gyakorlat jegyzet 10. óra

Programozás alapjai. 5. előadás

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

Programozás II. 2. Dr. Iványi Péter

Objektumelvű programozás

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

C# osztályok. Krizsán Zoltán

.Net adatstruktúrák. Készítette: Major Péter

Adatbázisok webalkalmazásokban

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Informatika terméktervezőknek

Virtuális függvények (late binding)

Bevezetés a C++ programozási nyelvbe

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

1. Alapok. Programozás II

Objektumorientált programozás C# nyelven III.

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

Objektumorientált programozás C# nyelven

OOP #14 (referencia-elv)

Programozási nyelvek II.: JAVA

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Mit ír ki? feladatok megoldásokkal

Szoftvertechnológia alapjai Java előadások

Programozási nyelv Java

Programozás II. ATM példa Dr. Iványi Péter

0.2.1 Operátorok túlterhelése (műveletek definiálhatók felhaszn. típusokra) Kutya. Eb1. Eb2. Név (txt): Rex. Blöki. Német juhász 3

feladat pont min elért

Átírás:

Fejlett programozási nyelvek C++ 2. előadás Antal Margit 2010 slide 1

Források [BSWEB] Bjarne Stroustrup Texas A&M University AT&T Labs Research http://www.research.att.com/~bs [BSPACT] Bjarne Stroustrup: Speaking C++ as a Native PACT Workshop, 15 September 2007, Brasov, Romania slide 2

Témakörök A standard C++ standardok, célok Absztrakció osztályok és sablonok Generikus programozás konténerek, algoritmusok és iterátorok Objektumorientált programozás Többelvű programozás slide 3

I. A standard C++ 1998-as standard (2003 javított kiadás) C++ fordítók Borland, HP/Compaq, IBM, Intel, GNU, CodeWarrior, Microsoft, Sun Platformok: Mac, IBM, Unix/Linux, Windows, Symbian, Palm, beágyazott rendszerek Általános célú programozási nyelv slide 4

C++ jellemzők általános célú programozási nyelv támogatja az absztrakciót osztály sablon támogatja az objektumorientált paradigmát egységbezárás polimorfizmus öröklődés támogatja a generikus programozást típusfüggetlen tárolók általánosított eljárások slide 5

Fordítóprogramok teljesítménye FLOPS -FLoating point Operations Per Second slide 6

C++ s greatest weakness: poor use [BSPACT] C stílusú elemek használata tömbök, void *, típuskényszerítés, makrók, stb.,,a kerék újrafeltalálása'' saját implementációk adatstruktúrákra: string, vector, list, map saját widgetek (GUI) saját perzisztencia modul saját szálkezelés Túlzásba vinni az öröklődés használatát,,mamut'' osztályhierarchiák slide 7

II. Absztrakció, osztályok [BSPACT] Fogalmak ábrázolása Szerepkörök: Érték típus (Value type) - példa! megszorítások Függvény típus függvényobjektum Erőforrás kezelő - példa! konténer, fájl, stb. Csomópont típus osztályhierarchián belül Interfész típus slide 8

Az osztály, mint "value type" [BSPACT] void f(range arg){ try { Range v1(0,3,10);// 3 in range [0,10) Range v2(7,9,100);// 9 in range [7,100) v1 = 7;// ok: 7 is in [0,10) int i = v1-v2;// extract values from Ranges arg= v1;// may throw exception v2 = arg;// may throw exception v2 = 3;// will throw exception: 3 is not in [7,100) } catch(range_error) { cerr<< Oops: range error in f() ; } } slide 9

Az osztály, mint "value type" [BSPACT] class Range { int value, low, high; // invariant: low <= value < high void check(int v) { if (v<low high<=v) throw Range_error(); } public: Range(int lw, int v, int hi) : low(lw), value(v), high(hi) { check(v); } Range(const Range& a) :low(a.low), value(a.value), high(a.high) { } Range& operator=(const Range& a) { check(a.value); value=a.value; return *this; } Range& operator=(int a) { check(a); value=a; return *this;} operator int() const { return value; }// extract value }; slide 10

Általánosított Range osztály template<class T> class Range { T value, low, high; // invariant: low <= value < high void check(t v) { if (v<low high<=v) throw Range_error(); } public: Range(T lw, T v, T hi) : low(lw), value(v), high(hi) { check(v); } Range(const Range& a) :low(a.low), value(a.value), high(a.high) { } Range& operator=(const Range& a) { check(a.value); value=a.value; return *this; } Range& operator=(int a) { check(a); value=a; return *this;} operator T() const { return value; }// extract value }; slide 11

Range<T> használata [BSPACT] Range<int> ri(10, 10, 1000); Range<double> rd(0, 3.14, 1000); Range<char> rc('a', 'a', 'z'); Range<string> rs("algorithm", "Function", "Zero"); Range< complex<double> > rc(0,z1,100);// error:< is not defined for complex slide 12

Erőforrás-kezelő osztály Erőforrások: memória, file handle, socket Mi a feladata egy ilyen osztálynak? a példány létrehozása inicializálja az erőforrást az erőforrás-hozzáférés vezérlése a példány megsemmisítésekor az erőforrást fel kell szabadítani Extra feladat: kivétel keletkezésekor az erőforrást fel kell szabadítani slide 13

Erőforrás kezelés C nyelvben void f ( const char* filename ) { FILE * f = fopen( filename, "r"); // fájlműveletek fclose( f ); } slide 14

Erőforrás kezelése C++ nyelvben class File_handle { FILE* p; public: File_handle(const char* pp, const char* r) { p = fopen(pp,r); if (p==0) throw File_error(pp,r); } File_handle(const string& s, const char* r) { p = fopen(s.c_str(),r); if (p==0) throw File_error(pp,r); } ~File_handle() { fclose(p); }// destructor // copy operations // access functions }; void f(string s){ File_handle fh(s, "r"); // use fh } slide 15

III. Generikus programozás Eredeti cél: standard tárolók típusbiztosság futásidejű típusellenőrzés nélkül hatékonyság Eredeti cél következménye: standard algoritmusok több tárolóra is alkalmazható legyen Általános cél: a fogalmak lehető legtermészetesebb és legrugalmasabb ábrázolása slide 16

Általános elemtípus int n; while (cin>>n) vi.push_back(n); sort(vi.begin(), vi.end()); string s; while (cin>>s) vs.push_back(s); sort(vs.begin(),vs.end()); template<class T> void read_and_sort(vector<t>& v){ T t; while (cin>>t) v.push_back(t); sort(v.begin(),v.end()); } slide 17

Általános művelet template<class T, class Cmp>// parameterize with comparison void read_and_sort(vector<t>& v, Cmp c = less<t>()) { T t; while (cin>>t) v.push_back(t); sort(v.begin(), v.end(), c); } vector<double> vd; read_and_sort(vd);// sort using the default < vector<string> vs; read_and_sort(vs,no_case()); // sort case insensitive slide 18

Művelet típusú paraméter [BSPACT] struct Record { string name; string addr; }; vector<record> vr; // sort(vr.begin(), vr.end(), Cmp_by_name()); sort(vr.begin(), vr.end(), Cmp_by_addr()); slide 19

Struktúra, mint függvény típus [BSPACT] struct Cmp_by_name{ bool operator()(const Rec& a, const Rec& b) const { return a.name < b.name; } }; struct Cmp_by_addr{ bool operator()(const Rec& a, const Rec& b) const { return a.addr < b.addr; } }; slide 20

Függvényen (algoritmuson) végzett általánosítások Rendezési algoritmus: Elem típusa: Milyen elemeket kell rendezni? primitív típus: int, char, double, stb. összetett típus: string, struct, class Művelet típusa: Hogyan kell az elemeket összehasonlítani? < alapértelmezett összehasonlító függvény függvényként viselkedő osztály: függvényobjektum slide 21

Iterátorok (Bejárók) Foglamak szétválasztása: az algoritmus adatokon dolgozik, de nem ismeri a tárolók belső struktúráját a tárolók adattárolással foglalkoznak, nem ismerik az algoritmusokat iterátorok lehetővé teszik az algoritmusok alkalmazását tárolókra slide 22

Iterátorok Akkumulátor algoritmus: összegzi egy tartomány elemeit int x[]={1,2,3,4,5}; vector<int>v(x, x+5); int sum1 = accumulate(v.begin(), v.end(), 0); v.begin() list<int> l(x, x+5); 1 2 3 4 5 v.end() double sum2 = accumulate(l.begin(), l.end(), 0); l.begin() l.end() 1 2 3 4 5 slide 23

Az accumulate algoritmus template<class In, class T> T accumulate(in first, In last, T init) { } while (first!=last) { init = init + *first; } ++first; return init; slide 24

IV. Objektumorientált programozás Osztályhierarchia 1. változat Shape osztály = interfész + állapot class Shape { Color col; Point center; // public: }; virtual void draw()=0; virtual void rotate(double)=0; // class Circle : public Shape { double radius; void draw() { }//... }; class Triangle : public Shape { Point a,b,c; void draw() { } //...}; slide 25

Objektumorientált programozás Osztályhierarchia 2. változat Shape osztály = csak interfész!!! class Shape { public: }; virtual void draw() = 0; virtual void rotate(double) = 0; // class Circle : public Shape { Point c; double radius; Color col; /* */ }; class Triangle : public Shape { Point a, b, c; Color col; / * */ }; slide 26

Többelvű programozás void draw_all(vector<shape*>& v) { } for_each(v.begin(), v.end(), mem_fun(&shape::draw)); slide 27