Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető
|
|
- Andrea Soósné
- 6 évvel ezelőtt
- Látták:
Átírás
1 Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M C++ programozási nyelv BME-IIT Sz.I
2 Hol tartunk? OO alapismeretek, paradigmák egységbezárás (encapsulation) osztályok (adatszerkezet + műveletek) többarcúság (polymorphism) műveletek paraméter függőek, tárgy függőek (kötés) példányosítás (instantiation) öröklés (inheritance) generikus adatok és algoritmusok Konkrét C++ szintaxis C++ programozási nyelv BME-IIT Sz.I
3 Konstruktor feladatai (ism.) Öröklési lánc végén hívja a virtuális alaposztályok konstruktorait. Hívja a közvetlen, nem virtuális alaposztályok konstruktorait. Létrehozza a saját részt: beállítja a virtuális alaposztály mutatóit beállítja a virtuális függvények mutatóit hívja a tartalmazott objektumok konstruktorait végrehajtja a programozott törzset C++ programozási nyelv BME-IIT Sz.I
4 Destruktor feladatai (ism.) Megszünteti a saját részt: végrehajtja a programozott törzset tartalmazott objektumok destruktorainak hívása virtuális függvénymutatók visszaállítása virtuális alaposztály mutatóinak visszaállítása Hívja a közvetlen, nem virtuális alaposztályok destruktorait. Öröklési lánc végén hívja a virtuális alaposztályok destruktorait. C++ programozási nyelv BME-IIT Sz.I
5 Kivételkezelés működés részletei, Ma hatása az objektumok élettartamára Konstruktorban, destruktorban Létrehozás/megsemmisítés működésének felhasználása (pl. fájlkezeléshez) STL bevezető (áttekintés) C++ programozási nyelv BME-IIT Sz.I
6 Erőforrás foglalás-felszabadítás Gyakori, hogy erőforrásként kell kezelni valamit (memória, fájl, eszköz, stb.): lefoglalás feldolgozás felszabadítás Az ilyen esetekben külön figyelmet kell fordítani arra, hogy a feldolgozás közben észlelt hiba esetén is gondoskodjunk a felszabadításról. C++ programozási nyelv BME-IIT Sz.I
7 Erőforrás foglalás-felszabadítás/2 FILE *fp = fopen("f1.txt", "r"); // megnyitás try { catch (...) { fclose(fp); throw; fclose(fp); // file feldolgozása // lezárás hiba esetén // tovább // lezárás normál esetben C++ programozási nyelv BME-IIT Sz.I
8 Erőforrás foglalás-felszabadítás/3 class FILE_ptr { FILE *p; public: FILE_ptr(const char *n, const char *m) { p = fopen(n, m); ~FILE_ptr { fclose(p); operator FILE*() { return p; ; cast operator automatikus cast { FILE_ptr fp("f1.txt", "r"); fprintf(fp, "Hello"); destruktor megszüntet (bezár) C++ programozási nyelv BME-IIT Sz.I
9 Kivételes esetek kezelése (ism.) Kinek kell jelezni? felhasználó, másik programozó, másik program saját magunknak A kivételes eset kezelése gyakran nem annak keletkezési helyén történik. (Legtöbbször nem tudjuk, hogy mit kell tenni. Megállni, kiírni valami csúnyát, stb.) C++ programozási nyelv BME-IIT Sz.I
10 Kivétel kezelés (ism.) C++ típus orientált kivételkezelést támogat, amivel a kivételes esetek kezelésének szinte minden formája megvalósítható. A kivételkezeléshez tartozó tevékenységek: figyelendő kódrészlet kijelölése (try) kivétel továbbítása (throw) esemény lekezelése (catch) C++ programozási nyelv BME-IIT Sz.I
11 Kivételkezelés = globális goto (ism) try Fv. Kivételes eset: throw A Felügyelt műveletek beleértve az innen hívott függvényeket is. catch Kivétel elkapása, típus alapján, és kezelése. Kivételes eset: throw B C: setjmp( ) longjmp( ) További műv. A: A típusú érték B: B típusú érték C++ programozási nyelv BME-IIT Sz.I
12 Kivételkezelés példa (ism) Hiba/kivétel észlelése Felügyelt szakasz. Ennek a működése során fordulhat elő a kivételes eset. double osztas(int y) { if (y == 0) throw "Osztas nullaval"; return((5.0/y); int main() { try { cout << "5/2 =" << osztas(2) << endl; cout << "5/0 =" << osztas(0) << endl; catch (const char *p) { cout << p << endl; A kivételt azonosító érték eldobása. Típus azonosít (köt össze). Kivétel elkapása és kezelése. C++ programozási nyelv BME-IIT Sz.I
13 Újdonságok a korábbiakhoz A dobott kivétel alap ill. származtatott objektum is lehet. try { throw E(); catch(h) { // mikor jut ide? 1. H és E azonos típusú, 2. H bázisosztálya E-nek, 3. H és E mutató és teljesül rájuk 1. vagy 2., 4. H és E referencia és teljesül rájuk 1. vagy 2. C++ programozási nyelv BME-IIT Sz.I
14 Következtetések Célszerű kivétel osztályokat alkalmazni, (pl. std::exceptions) amiből származtatással újabb kivételeket lehet létrehozni. A dobás értékparamétert dob, ezért az elkapáskor számolni kell az alaposztályra történő konverzióval (adatvesztés). Célszerű pointert, vagy referenciát alkalmazni. Kell másoló konstruktor. C++ programozási nyelv BME-IIT Sz.I
15 Kivételek specifikálása Függvény deklarálásakor/definíciójakor megadható, hogy milyen kivételeket generál az adott függvény. Ha mást is generálna, akkor az automatikusan meghívja az unexpected() handlert. void f1() throw (E1, E2); // csak E1, E2 void f2() throw(); // semmi void f3(); // bármi void f3() noexcept(true) // semmi (C++11-től) C++17-től megszűnik a függvények din. kivétel specifikációja. Csak dob/nemdob. C++ programozási nyelv BME-IIT Sz.I
16 Továbbdobás try { throw E(); catch(h) { if (le_tudjuk kezelni) {... else { throw; Paraméter nélkül Az eredeti dobódik tovább, nem csak az elkapott változat. C++ programozási nyelv BME-IIT Sz.I
17 Minden elkapása try { throw E(); catch(...) { // szükséges feladatok throw; Minden kivétel A kezelők sorrendje fontos! C++ programozási nyelv BME-IIT Sz.I
18 Rollback (stack unwinding) try { A a; B b; C *cp = new C; if (hiba) throw "Baj van"; delete cp; catch(const char *p) { // A létezik? // B létezik? // *cp által mutatott obj. létezik? Minden a blokkban deklarált, "létező" objektum destruktora meghívódik. Hiba esetén C nem szabadul fel, de cp megszűnik. C++ programozási nyelv BME-IIT Sz.I
19 Melyik obj. létezik? Csak az az objektum számít létezőnek, amelynek a konstruktora lefutott. Ha a konstruktor nem fut le, akkor a rollback során a destruktor sem fog végrehajtódni. Előző példában C konstruktora lefutott ugyan, de nem deklarációval hoztuk létre, hanem dinamikusan. C++ programozási nyelv BME-IIT Sz.I
20 Kivétel a konstruktorban Lényegében a kivételkezelés az egyetlen mód arra, hogy a konstruktor hibát jelezzen. Hiba esetén gondoskodni kell a megfelelő obj. állapot előállításáról. Inicializáló listán keletkező kivétel elfogása: class A { B b; public: A() try :b() { // konstruktor programozott része catch (...) { // kivételkezelés ; C++ programozási nyelv BME-IIT Sz.I
21 Kivétel a destruktorban Destruktor hívás oka: 1. Normál meghívás 2. Kivételkezelés (rollback) miatti meghívás. Ekkor a kivétel nem léphet ki a destruktorból. Destruktorban keletkező kivétel elfogása: A::~A() try { // destruktor törzse catch (...) { // kivételkezelés C++ programozási nyelv BME-IIT Sz.I
22 Szabványos kivételek (stdexcept) bad_alloc bad_cast bad_typeid bad_exception ios_base::failure range_error overflow_error underflow_error lenght_error domain_error out_of_range invalid_argument runtime_error exception logic_error C++ programozási nyelv BME-IIT Sz.I
23 Szabványos kivételek/2 class exception {... public: exception() throw(); exception(const exception&) throw(); execption& operator=(const exception&) throw(); virtual ~exception() throw(); virtual const char *what() const throw(); ; class runtime_error : public exception { public: explicit runtime_error(const string& what_arg); ; class logic_error : public exception { public: explicit logic_error(const string& what_arg ); ; C++ programozási nyelv BME-IIT Sz.I
24 Szabványos kivételek/3 A standard könyvtár nem bővíti az exception osztály függvényeit, csak megfelelően átdefiniálja azokat. A felhasználói programnak nem kötelessége az exceptionből származtatni, de célszerű. try {... referencia catch (exception& e) { cout << "exeptionból származik" cout << e.what() << endl; catch (...) { cout << "Ez valami más\n"; C++ programozási nyelv BME-IIT Sz.I
25 Kapcsolódó függvények terminate_handler set_unexpected(voif f()) throw(); bellálítja az unexpected handlert. void unexpected(); meghívja az unexpected handlert. Ha ez nem várt kivételt dob, és a bad_exception lehetséges, akkor bad_exeption kivétel keletkezik. void f4() throw (E1, bad_exception); terminate_handler set_terminate(void f()) throw(); beállítja a terminate handlert void terminate(); meghívja a terminate handlert bool uncaugtht_exception() throw(); kivételkezelés folyamatban van, még nem talált rá a megfelelő handlerre (nem kapták el). Destruktorban lenne szerepe, de C++11-től a szignatúra változik C++ programozási nyelv BME-IIT Sz.I
26 unexpected kezelés példa void myhandler() { throw; // továbbdob -> bad_exception void valami() throw (int, bad_exception) { throw 'c'; // karaktert dob, -> unexpected int main (void) { set_unexpected(myhandler);// saját handlert állít try { valami(); catch (exception &e) { cerr << e.what() << endl; return 0; C++ programozási nyelv BME-IIT Sz.I
27 Szabványos könyvtár (STL) Általános célú, újrafelhasználható elemek: tárolók, majdnem tárolók algoritmusok függvények bejárók kivételek memóriakezelők adatfolyamok C++ programozási nyelv BME-IIT Sz.I
28 Szabványos tárolók vector list deque stack queue priority_queue Sorozattárolók Adapterek map multimap set multiset string array valarray bitset Asszociatív tárolók Majdnem tárolók C++ programozási nyelv BME-IIT Sz.I
29 vector template template <class T, class Allocator = allocator<t> > class vector { public: // Types typedef T value_type; typedef Allocator allocator_type; class iterator; class const_iterator; typedef typename Allocator::size_type size_type; typedef typename Allocator::difference_type difference_type; typedef typename Allocator::reference reference; typedef typename Allocator::pointer pointer; typedef typename std::reverse_iterator<iterator> reverse_iterator;... C++ programozási nyelv BME-IIT Sz.I
30 vector template/2 // Construct/Copy/Destroy explicit vector(const Allocator& = Allocator()); explicit vector(size_type, const Allocator& = Allocator ()); vector(size_type, const T&, const Allocator& = Allocator()); vector(const vector<t, Allocator>&); vector<t,allocator>& operator=(const vector<t, Allocator>&); template <class InputIterator> void assign(inputiterator start, InputIterator finish); void assign(size_type, const); allocator_type get_allocator () const; C++ programozási nyelv BME-IIT Sz.I
31 vector template/3 // Iterators iterator begin(); const_iterator begin() const; iterator end(); const_iterator end() const; reverse_iterator rbegin(); const_reverse_iterator rbegin() const; reverse_iterator rend(); const_reverse_iterator rend() const; C++ programozási nyelv BME-IIT Sz.I
32 vector template/4 // Capacity size_type size() const; size_type max_size() const; void resize(size_type); void resize(size_type, T); size_type capacity() const; bool empty() const; void reserve(size_type); // elméleti maximum // jelenleg allokált C++ programozási nyelv BME-IIT Sz.I
33 vector template/5 // Element Access reference operator[](size_type); const_reference operator[](size_type) const; reference at(size_type); const_reference at(size_type) const; reference front(); const_reference front() const; reference back(); const_reference back() const; C++ programozási nyelv BME-IIT Sz.I
34 vector template/6 // Modifiers void push_back(const T&); void pop_back(); iterator insert(iterator, const T&); void insert(iterator, size_type, const T&); template <class InputIterator> void insert(iterator, InputIterator, InputIterator); iterator erase(iterator); iterator erase(iterator, iterator); void swap(vector<t, Allocator>&); void clear() ; C++ programozási nyelv BME-IIT Sz.I
35 Tárolók által definiált típusok Általános, minden tárolóra érvényes value_type, allocator_type, reference, const_reference, pointer, const_pointer iterator, const_iterator reverse_iterator, const_reverse_iterator difference_type size_type Minden asszociatív tárolóra érvényes key_type key_compare C++ programozási nyelv BME-IIT Sz.I
36 Tárolók műveletei (áttekintés) Általános, minden tárolóra érvényes létrehozás/megszüntetés: konstruktorok/destruktor értékadás: operator=, assign() iterátor példányosítás: begin(), end(), rbegin(), reend() méret lekérdezés: size(), max_size(), capacity() empty() módosítók: insert(), erase(), clear(), swap() Lista kivételével minden sorozattárolóra érvényes elemek elérése: front(), back(), operator[], at() módosítók: push_back(), pop_back() Minden asszociatív tároló érvényes count(), find(), lower/upper_boud(), equal_range() Speciális, csak egy adott tárolóra alkalmazható pl: elemek elérése: pop_front(), push_front(), módosítók: merge(), splice(), uniq(), remove(), sort(), C++ programozási nyelv BME-IIT Sz.I
37 Létrehozás, iterátorok vektor<double> dvec; vektor<int> ivec(10); vector<char> cvec(5, '*') int v[] = {1, 2, 3; vector<int> iv(v, v+3); vector<int> iv2(iv); vektor<int>::iterator it; vector<int>::reverse_iterator rit; it = ivec.begin(); rit = ivec.rend(); konstruktorok, destr.: container() conatiner(n) container(n,x) container(first, last) container(c) ~container() iterátor: container::iterator container::reverse_iterator begin(), end() rbegin(), rend() for (it = ivec.begin(); it!= ivec.end(); ++it) std::cout << *it; C++ programozási nyelv BME-IIT Sz.I
38 Értékadás, elérés, size template <typename C> // Segédsablon a példákhoz void print(c& co, const char* sep = ",") { for (typename C::iterator it = co.begin(); it!= co.end(); ++it ) std::cout << *it << sep; list<int> ilist1, ilist2(100); ilist1.assign(5, 3); ilist2.assign(ilist1.begin(), ilist1.end()); cout << ilist2.size(); // 5 print(ilist2, ", " ); // 3, 3, 3, 3, 3, vector<int> ivec(ilist2.begin(), ilist2.end()); ivec[0] = 6; cout << ivec.front(); // 6 cout << ivec.back(); // 3 assign: (2 fajta) assign(n,x) assign(first, last) C++ programozási nyelv BME-IIT Sz.I
39 Módosítók template <typename C> // Segédsablon a példákhoz void reverse_print(c& co, const char* sep = ",") { for (typename C::reverse_iterator it = co.rbegin(); it!= co.rend(); ++it ) std::cout << *it << sep; char duma[] = "HELLO"; vector<char> cv(duma, duma+5); reverse_print(cv, ""); // OLLEH cv.insert(cv.end(), ' '); cv.insert(cv.end(), duma, duma+5); print(cv, ""); //HELLO HELLO cv.insert(cv.begin(), 3, '*') ; print(cv, ""); //***HELLO HELLO insert: (3 fajta) insert(pos, x); insert(pos, first, last); insert(pos, n, x) C++ programozási nyelv BME-IIT Sz.I
40 További módosítók deque<int> iq1, iq2; iq1.push_back(3); iq1.push_back(4); iq1.push_back(8);iq1.push_back(10); iq1.push_back(2);iq1.push_back(7); cout << iq1.front(); // 3 print(iq1); // 3,4,8,10,2,7, iq1.pop_back(); print(iq1); // 3,4,8,10,2, iq1.erase(iq1.begin()+1); print(iq1); // 3,8,10,2, iq1.erase(iq1.begin()+1, iq1.end()); print(iq1); // 3, erase: (2 fajta) erase(pos); erase(first, last); C++ programozási nyelv BME-IIT Sz.I
41 Asszociatív tárolók műveletei set<int> set1; set1.insert(4); set1.insert(3); cout << set1.count(3); // 1 set1.insert(3); set1.insert(10); print(set1); // 3,4,10, if (set1.find(4)!= set1.end()) cout << "megvan"; // megvan typedef set<int>::iterator myit; myit it = set1.lower_bound(4); cout << *it; // 4 it = set1.upper_bound(4); cout << *it; // 10 std::pair<myit, myit> rit; rit = set1.equal_range(4); cout << *rit.first << ":" << *rit.second; // 4:10 count(x) find(x) lower_bound(x) upper_bound(x) equal_range(x) C++ programozási nyelv BME-IIT Sz.I
42 vector<t, Alloc> Speciális műveletek: capacity() reserve() resize(n), resize(n, val) int v[] = {0, 1, 2; vector<int> iv(v, v+3); iv.push_back(3); iv.at(5) = 5; // hiba Nincs: push_front, pop_front asszociatív op. iv.resize(7, -8); iv.at(5) = 5; // nincs hiba print(iv) // 0,1,2,3,-8,5,-8, C++ programozási nyelv BME-IIT Sz.I
43 list<t, Alloc> Speciális műveletek: merge(list), merge(list, bin_pred) remove(val) remove_if(un_pred) resize(n), resize(n, val) sort(), sort(bin_pred) splice(p, list) splice(p, list, first) splice(p, list, first, last) unique(),unique(bpred) Nincs: at(), operator[]() asszociatív op. list<int> il(2, -3); il.push_front(9); il.push_back(2); il.sort(); print(il); // -3, -3, 2, 9, il.unique(); list<int> il2(3, 4); il.merge(il2); print(il); // -3, 2, 4, 4, 4, 9, C++ programozási nyelv BME-IIT Sz.I
44 deque<t, Alloc> Kétvégű sor Speciális műveletek: resize(n), resize(n, val) Nincs: asszociatív op. deque<int> dq; dq.push_back(6); dq.push_front(9); print(dq); // 9, 6, dq.resize(6, -3); print(dq); //9, 6, -3, -3, -3,-3, if (!dq.empty()) print(dq); // 9, 6, 2, 0, -3, 1, dq.back() = 1; print(dq); // 9, 6, -3, -3, -3, 1, dq[2] = 2; print(dq); // 9, 6, 2, -3, -3, 1, dq.at(3) = 0; C++ programozási nyelv BME-IIT Sz.I
45 stack<t, deque> Elrejti a kétvégű sor nem verem stílusú műveleteit. Műveletek: empty() push() pop() top() stack() stack(cont) while (!s.empty()) { cout << s.top() << ", "; s.pop(); // 13, 4, 2, 1, stack<int> s; s.push(1); s.push(2); s.push(3); s.top() = 4; s.push(13); C++ programozási nyelv BME-IIT Sz.I
46 queue<t, deque> Elrejti a kétvégű sor nem sor stílusú műveleteit. Műveletek: empty() push() > push_back() pop() > pop_front() front() back() queue(), queue(cont) queue<int> q; q.push(1); q.push(2); q.push(3); q.back() = 4; q.push(13); while (!q.empty()) { cout << q.front() << ", "; q.pop(); // 1, 2, 4, 13, C++ programozási nyelv BME-IIT Sz.I
47 priority_queue<t, vector, Cmp> Prioritásos sor. Alapesetben a < operátorral hasonlít. Műveletek: empty() push() pop() top() priority_queue() while (!pq.empty()) { cout << pq.top() << ", "; pq.pop(); // 13, 3, 2, 1, -2, priority_queue<int> pq; pq.push(1); pq.push(2); pq.push(3); pq.push(-2); pq.push(13); C++ programozási nyelv BME-IIT Sz.I
48 map<key, T, Cmp, Alloc> Asszociatív tömb (kulcs, érték) pár tárolása alapértelmezés szerint < operátorral hasonlít map maga is összehasonlítható map<string, int> m; m["haho"] = 8; m["almas"] = 23; cout << m["haho"] << endl; cout << m["almas"] << endl; map<string, int>::iterator i = m.find("haho"); C++ programozási nyelv BME-IIT Sz.I
49 pair<const Key, mapped_type> Párok map bejárásakor párok (pair) sorozatát kapjuk A kulcsra first, az értékre second mezővel hivatkozhatunk map<string, int> m; m["haho"] = 8; m["almas"] = 23; m["xx"] = 13; map<string, int>::iterator p; for (p = m.begin(); p!= m.end(); p++) { cout << p->first << ": "; cout << p->second << ", "; // almas: 23, haho: 8, xx: 13 C++ programozási nyelv BME-IIT Sz.I
50 set<key, Cmp, Alloc> Halmaz olyan map, ahol nem tároljuk az értéket alapértelmezés szerint < operátorral hasonlít map-hoz hasonlóan összehasonlítható set<long> s; s.insert(3); s.insert(3); s.insert(7); s.insert(12); s.insert(8); cout << s.count(6) << endl; // 0 cout << s.count(3) << endl; // 1 set<long>::iterator i = s.find(3); print(s); // 3, 7, 8, 12, C++ programozási nyelv BME-IIT Sz.I
51 Demo:Eseményvezérelt program Demonstrációs cél: eseményvezérlés grafikus felhasználói felület működése, egyszerű SDL grafika, újrafelhasználható elemek, callback technika Specifikáció: Eseményekre reagáló alakzatok (körök) felrakása a képernyőre. Vezérlő gombok (töröl, kilép) kialakítása. Események: Egérmozgatás, kattintás, húzás (drag) C++ programozási nyelv BME-IIT Sz.I
52 grafikus primitívek: Szereplők Widget, Circle, Button, ActiveBg összetettet grafikus elemek: Container, BulletinBoard (Bboard), Application Shell (AppShell) C++ programozási nyelv BME-IIT Sz.I
53 Osztálydiagram A modell nem kezel ablakokat, így vágás sincs az ablakok határán. Minden grafikus elem a képernyő tetszőleges pontján megjelenhet. Egy esemény érkezésekor (pl. kattintás) a konténerbe helyezéssel ellentétes sorrendben megkérdezzük az objektumokat, hogy az adott koordináta hozzá tartozik-e (contains fv.). Amennyiben igen, akkor meghívjuk a eseménykezelőjét. Az eseménykezelő visszatérési értékel jelzi, hogy kezelt-e. A Bboard objektum hazudós, mert minden pozícióra rábólint, hogy az övé. Így végigfut a tárolóban az ellenőrzés. C++ programozási nyelv BME-IIT Sz.I
54 Widget class Widget { protected: static SDL_Surface *scr; // eldugott globális Point p0; // Widget origója Color fg; // Előtér szín Color bg; // Háttérszín public: Widget(const Point& p0 = Point(),const Color& fg = WHITE, const Color& bg = BLACK) :p0(p0), fg(fg), bg(bg) { static void setsurface(sdl_surface* s) { scr = s; virtual bool contains(const Point& p) { return false; virtual bool eventhandler(const SDL_Event& ev){ return false; ; void move(const Point& d); virtual void draw() const = 0; virtual ~Widget() { ; C++ programozási nyelv BME-IIT Sz.I
55 Circle class Circle : public Widget { int r; // sugár bool fill; // kitöltött-e a kör public: Circle(const Point& p0, int r,const Color& fg = WHITE, const Color& bg = BLACK, bool fill = false) :Widget(p0, fg, bg), r(r), fill(fill){ void draw() const; bool contains(const Point& p); bool eventhandler(const SDL_Event& ev); ~Circle() { ; fg = bg; draw(); // letörlés C++ programozási nyelv BME-IIT Sz.I
56 Container class Container : public Widget { protected: std::vector<widget*> widgets; //< Itt tárolunk Point cursor; //< egérmozgáshoz public: void add(widget *w); void clear(); bool contains(const Point& p) { cursor = p; // egérmozgás követése return false; bool eventhandler(const SDL_Event&); void draw() const; ~Container() { clear(); ; C++ programozási nyelv BME-IIT Sz.I
57 Bboard // Hazudós, mert minden koordinátát magáénak gondol. // Így meghívódik az eseménykezelője class Bboard : public Container { public: // A teljes képernyő a tárolóhoz tartozik. // Minden pontot magáénak tekint. bool contains(const Point& p) { Container::contains(p); return true; ; C++ programozási nyelv BME-IIT Sz.I
58 AppShell struct AppShell : public Container { AppShell(SDL_Surface *scr) { Widget::setSurface(scr); void mainloop(); ; void AppShell::mainLoop() { SDL_Flip(scr); SDL_Event ev; Point cursor; while (SDL_WaitEvent(&ev) && ev.type!= SDL_QUIT) { bool changed = false; // egér követése if (ev.type == SDL_MOUSEMOTION) { cursor.x = ev.motion.x; cursor.y = ev.motion.y; C++ programozási nyelv BME-IIT Sz.I
59 AppShell /2 // esemény továbbítása size_t i = widgets.size()-1; // megváltozhat a container tartalma a ciklus alatt while (i >= 0 && i < widgets.size()) { if (widgets[i]->contains(cursor)) { if (widgets[i]->eventhandler(ev)) { changed = true; break; i--; if (changed) { draw(); SDL_Flip(scr); C++ programozási nyelv BME-IIT Sz.I
60 Container add és clear // Új widgetet ad a tárolóhoz void Container::add(Widget *w) { widgets.push_back(w); w->draw(); // Törli a tárolót void Container::clear() { for (size_t i = 0; i < widgets.size(); i++) delete widgets[i]; widgets.clear(); C++ programozási nyelv BME-IIT Sz.I
61 Container draw és event void Container::draw() const { for (size_t i = 0; i < widgets.size(); i++) widgets[i]->draw(); // Az objektumok sorrendje meghatározza a takarásokat. bool Container::eventHandler(const SDL_Event& ev) { // megváltozhat a container tartalma a ciklus alatt for (size_t i = widgets.size()-1; i >= 0 && i < widgets.size(); i--) { if (widgets[i]->contains(cursor)) { if (widgets[i]->eventhandler(ev)) return true; return false; C++ programozási nyelv BME-IIT Sz.I
62 Button template // Jobban illeszthető a callback függvényekhez template<class T = void (&)(const SDL_Event&, int) > class Button : public Circle { T& cb; //< visszahívandó objektum referenciája int val; //< int érték public: // Konstruktor elteszi a rutin címét és a paramétert Button(const Point& p0, int r, T& cb, int val = 0, const Color& fg = WHITE, const Color& bg = BLACK) : Circle(p0, r, fg, bg, true), cb(cb), val(val) { // A felhasználói felületen megnyomták a gombot bool eventhandler(const SDL_Event& ev) { if (ev.type == SDL_MOUSEBUTTONDOWN) { if (ev.button.button == SDL_BUTTON_LEFT) cb(ev, val); return true; return Circle::eventHandler(ev); ; C++ programozási nyelv BME-IIT Sz.I
Hol tartunk? Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető. Erőforrás foglalás-felszabadítás. Konstruktor feladatai (ism.
Hol tartunk? Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2018.04.17.
Hol tartunk? Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető. Mit ír ki? Mit ír ki? #2. Konstruktor feladatai (ism.
Hol tartunk? Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2017.04.04. - 1 -
Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető
Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2017.04.04. - 1 - Hol tartunk?
Hiba és kivételkezelés. Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető. Kivételkezelés újból. Kivételkezelés = globális goto
Hiba és kivételkezelés Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT Hagyományos hibakezelési módszerek: Befejezi a program futását Hibakódot
Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető. Hiba és kivételkezelés. Kivételkezelés újból
Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2010.04.13. -1- Hiba és kivételkezelés
Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető
Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2015.04.13. - 1 - Hol tartunk?
Kivételek, kivételkezelés a C++ nyelvben
2009. Kivételek, kivételkezelés a C++ nyelvben Haladó C++ programozás Kurucz Attila ELTE - IK 2009.06.09. Tartalomjegyzék Tartalomjegyzék... 2 Mi a kivételkezelés?... 3 Alapfogalmak... 3 Kivétel... 3 Try
Programozás alapjai II. (13. ea) C++ Év végi összefoglalás
C++ kialakulása Programozás alapjai II. (13. ea) C++ Év végi összefoglalás Veszélyforrások csökkentése C + javítások Objektum orientált szemlélet OOP elemek Szeberényi Imre BME IIT C++
Programozás alapjai II. (13. ea) C++ Év végi összefoglalás
Programozás alapjai II. (13. ea) C++ Év végi összefoglalás Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2010.05.11. -1- C++ kialakulása Veszélyforrások
STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók
STL Elsődleges komponensek: Tárolók Algoritmusok Bejárók Másodlagos komponensek: Függvény objektumok Adapterek Allokátorok (helyfoglalók) Tulajdonságok Tárolók: Vektor (vector) Lista (list) Halmaz (set)
XIII. STL. Tároló Bejáró Algoritmus. XIII.1 A vector #include <vector> #include <vector> #include <algorithm> using namespace std;
XIII. STL Tároló Bejáró Algoritmus #include #include using namespace std; vector vect; // a vect adatainak megadása sort(vect.begin(),vect.end()); XIII.1 A vector #include
Fejlett programozási nyelvek C++ Iterátorok
Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1 Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök
C++ Standard Template Library (STL)
Programozási Nyelvek és Fordítóprogramok Tanszék Programozási Nyelvek I. Témák 1 STL alapok 2 STL fogalmak 3 Konténerek 4 Iterátorok 5 Funktorok C++ STL Ne fedezzük fel újra spanyolviaszt! Sok adatszerkezet/algoritmus
Hol tartunk? Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető. Mit ír ki? Mit ír ki? #2. Konstruktor feladatai (ism.
Hol tartunk? Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.19. - 1 -
Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető
Programozás alapjai II. (9. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.19. - 1 - Hol tartunk?
500. DD Megoldó Alfréd DD 500.
Programozás alapjai 2. (inf.) zárthelyi 2009.05.21. gyakorlat: / Érdemjegy: QBX734 () IB319/32. Hftest: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
1.AA MEGOLDÓ BERCI AA 1.
Programozás alapjai 2. (inf.) 2. zárthelyi 2015.05.07. gyak./lab. hiányzás: 3/2 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat
STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1
STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat
Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 12. előadás (Standard Template Library) 2014.05.19. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia
Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek
500. AA Megoldó Alfréd AA 500.
Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden
500. CC Megoldó Alfréd CC 500.
Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: G1/IB.146 Hiány:3 ZH:7,71 MEGOLD SCH/500. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
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.
Programozás alapjai 2. (inf.) pót zárthelyi 2014.05.22. gyak. hiányzás: 2 n/kzhp: n/11,5 ABCDEF IB.028/2. Hftest: 4 (2,4p) Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot,
Kivételkezelés a C++ nyelvben Bevezetés
Kivételkezelés a C++ nyelvben Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Kivételkezelés a C++ nyelvben CPP9 / 1 Hagyományos hibakezelés Függvény visszatérési értéke (paramétere) hátrányai:
1000.AA Megoldo Alfréd 1000.A
Programozás alapjai 2. (inf.) 2. PZH 2018.05.22. hiányzás:0+3 L4-R4P ZH: 27,5+26 ABCDEF IB.028/100. Sum:0 e:19 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de
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?
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? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
C++ programozási nyelv Konstruktorok-destruktorok
C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
117. AA Megoldó Alfréd AA 117.
Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
3. Osztályok II. Programozás II
3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt
Programozás II gyakorlat. 8. Operátor túlterhelés
Programozás II gyakorlat 8. Operátor túlterhelés Kezdő feladat Írjunk egy Vector osztályt, amely n db double értéket tárol. A konstruktor kapja meg az elemek számát. Írj egy set(int idx, double v) függvényt,
503.AA Megoldo Arisztid 503.A
Programozás alapjai 2. (inf.) 2. ZH 2017.04.27. gy./l. hiány: / ABCD123 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat értékeljük!
.AA Megoldó Alfréd AA.
Programozás alapjai 2. (inf.) pót zárthelyi 2013.05.23. gyak. hiányzás: kzh: ZH:0 ABCDEF MEG/200. Hftest: (p) Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
1. Alapok. Programozás II
1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph
Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat
Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot
1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon
1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (
Programozás alapjai II. (4. ea) C++
Programozás alapjai II. (4. ea) C++ konstruktor és értékadás, dinamikus szerkezetek Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.03.01. -1-
Bevezetés a programozásba 2
Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/ Vector int int main() { vector v(10); int int sum=0; for for (int i=0;i
Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia
Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.04.12. -1- Öröklés
C++11 TÓTH BERTALAN C++ PROGRAMOZÁS STL KONTÉNEREKKEL
C++11 TÓTH BERTALAN C++ PROGRAMOZÁS STL KONTÉNEREKKEL Tóth Bertalan: C++ programozás STL konténerekkel 2016 Jelen dokumentumra a Creative Commons Nevezd meg! Ne add el! Ne változtasd meg! 3.0 Unported
Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése
Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Készítette: Gregorics Tibor Szabóné Nacsa Rozália Alakítsunk át egy infix formájú aritmetikai kifejezést postfix
Programozás alapjai II. (2. ea) C++
Programozás alapjai II. (2. ea) C++ C++ kialakulása, nem OOP újdonságok: Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.02.15. -1- C++ kialakulása
Programozás alapjai II. (2. ea) C++
Programozás alapjai II. (2. ea) C++ C++ kialakulása, nem OOP újdonságok: Szeberényi Imre BME IIT Veszélyforrások csökkentése C + javítások C++ kialakulása C++ Objektum orientált szemlélet
Objektumok inicializálása
Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú
128. AA Megoldó Alfréd AA 128.
Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: Hiány:0 ZH: MEGOLD SEHOL/5. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden
Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék
Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus
Generikus Típusok, Kollekciók
Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections
Programozás II. 4. Dr. Iványi Péter
Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include
Programozás alapjai II. (1. ea) C++
Programozás alapjai II. (1. ea) C++ C++ kialakulása, nem OO újdonságok: Szeberényi Imre BME IIT Veszélyforrások csökkentése C + javítások C++ kialakulása C++ Objektum orientált szemlélet
Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja
Objektum elvű alkalmazások fejlesztése Verem típus osztály-sablonja Készítette: Gregorics Tibor Készítsünk olyan újra-felhasználható kódot, amellyel vermeket lehet létrehozni és használni. Egy verem-objektum
Programozás alapjai 2. (2. ea) C++
Programozás alapjai 2. (2. ea) C++ névterek, memóriakezelés Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2019.02.12. - 1 - Hol
Programozás C++ -ban 2007/4
Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos
Programozás C++ -ban
Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több
Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 11. előadás 2014.05.12. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Adatszerkezetek
Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok
Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok 1.Feladat Készítsünk olyan kódot, amely segítségével természetes számokat tároló halmazok hozhatók létre. o Egy halmaz-objektum
228. AA Default Konstruktor AA 228.
Programozás alapjai 2. (inf.) zárthelyi 2012.05.17. gyak. hiányzás: kzhpont: ABCDEF Q-II/107. nzh: Hftest: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok
1. Bevezetés A C++ nem objektumorientált újdonságai 3
Előszó xiii 1. Bevezetés 1 2. A C++ nem objektumorientált újdonságai 3 2.1. A C és a C++ nyelv 3 2.1.1. Függvényparaméterek és visszatérési érték 3 2.1.2. A main függvény 4 2.1.3. A bool típus 4 2.1.4.
Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union
Programozás alapjai C nyelv 10. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.21. -1- Standard függvények Standard függvények amelyeket
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) {} };
A C++ kódokban lévő makrókat melyik egység dolgozza fel az alábbiak közül? preprocessor A szabványos C++-ban nem is írhatunk makrókat (csak C-ben) assembler linker Az alábbi példában a Foo f(5); konstruktor
Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN
Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.
Programozás C++ -ban
8. Dinamikus objektumok Programozás C++ -ban Ahhoz hogy általános prolémákat is meg tudjunk oldani, szükség van arra, hogy dinamikusan hozhassunk létre vagy szüntethessünk meg objektumokat. A C programozási
Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés
Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;
Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén
.Net adatstruktúrák. Készítette: Major Péter
.Net adatstruktúrák Készítette: Major Péter Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek
Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.
Programozás C++ osztályok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. április 8. Csak bázisosztályként használt/értelmezhető
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális
Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek
Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 9. előadás Strukturált programozás: dinamikus adatszerkezetek Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
Programozás II gyakorlat. 6. Polimorfizmus
Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással
Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum
Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout
- 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]++;
Az alábbi feladatokat a AUT.BME.HU tanszéki weboldalon fellelhető AUT C++ Példatárból másoltam ki. A feladatokat a Programozás alapjai 2. ZH-ra való felkészülés jegyében válogattam, a példák nagy részét
Globális operátor overloading
Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal
Informatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
JAVA PROGRAMOZÁS 2.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,
List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error
Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,
Programozás. C++ típusok, operátorok. Fodor Attila
Programozás C++ típusok, operátorok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. március 4. Deklaráció és definíció C++
Programozás alapjai II. (6. ea) C++
Programozás alapjai II. (6. ea) C++ mutatókonverziók, heterogén kollekció Szeberényi Imre BME IIT Öröklés (ismétlés) Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek
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)
Programozás alapjai II. (3. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.02.22.
AA MEGOLDÓ ALADÁR AA
Programozás alapjai 2. (inf.) 1. zárthelyi 2015.03.30. gyak./lab. hiányzás: 3/2 G3-QB309 ZEZFCE Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Folyamok kezelése Fájlok írása/olvasása Folyamok kezelése Szabvány folyamok Eddig Kiírás a szöveges konzolra:
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,
Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.
Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat
Szövegek C++ -ban, a string osztály
Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string
Programozás alapjai II. (7. ea) C++
Programozás alapjai II. (7. ea) C++ generikus szerkezetek, template újból Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2019.03.26.
Programozás. Osztályok, Származtatott osztályok. Fodor Attila
Programozás Osztályok, Származtatott osztályok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. március 11. Beadandó feladat
500.AJ Megoldó Magyar Magdolna 500.J
Programozás alapjai 2. (inf.) 2. pzh 2017.05.09. gy./l. hiány: / ABCDEF IB.028/1. Z: / / Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt
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++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT Programfejlesztés Feladatanalízis világ = dolgok + tevékenységek Modellezés
Programozás II. 2. Dr. Iványi Péter
Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c
Java II. I A Java programozási nyelv alapelemei
Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak
500.AA Megoldó Kulcsár 500.A
Programozás alapjai 2. (inf.) 2. ZH 2019.05.14. lab. hiányzás: + / HFt: ABC123 IL.305./1. p: e: Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra
infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália
infix kifejezés a+b ab+ +ab Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab 4 Lengyelforma J. Lukasewitz lengyel matematikus használta el
Programozás alapjai II. (2. ea) C++
Programozás alapjai II. (2. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.02.23.
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Szimuláljuk különféle élőlények túlélési versenyét. A lények egy pályán haladnak végig, ahol váltakozó viszonyok vannak. Egy lénynek
Fejlett programozási nyelvek C++ Sablonok és adatfolyamok
Fejlett programozási nyelvek C++ Sablonok és adatfolyamok 11. előadás Antal Margit 2009 slide 1 Témakörök Sablonok Függvénysablon Osztálysablon Sablon metaprogramozás Adatfolyamok Operátorok és manipulátorok
Programozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa
Programozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2018.03.27. -
1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4
1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4 2) Hány byte-on tárol a C++ egy float-ot? implementáció-függő 6 4 8 3) Hány byte-on tárol a C++
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
A lista eleme 0 adat rész mutató rész Listaelem létrehozása p: Node 0 0 3 0 Az elemet nekünk kell bef zni a listába Deklarálás struct Node { int int value; Node* next; next; adattagok Létrehozás Node*
Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;
Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely
Fejlett programozási nyelvek C++
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: