Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Hasonló dokumentumok
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Osztályok. 4. gyakorlat

OOP. Alapelvek Elek Tibor

Programozási alapismeretek 4.

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

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

1. Alapok. Programozás II

Bevezetés a programozásba. 9. Előadás: Rekordok

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Bevezetés a programozásba. 8. Előadás: Függvények 2.

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.

C++ programozási nyelv Konstruktorok-destruktorok

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

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

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

C++ programozási nyelv

3. Osztályok II. Programozás II

Öröklés és Polimorfizmus

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

Objektum orientált programozás Bevezetés

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

OOP: Java 8.Gy: Abstract osztályok, interfészek

Globális operátor overloading

Web-technológia PHP-vel

4. Öröklődés. Programozás II

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

500. AA Megoldó Alfréd AA 500.

Programozás I. Első ZH segédlet

Már megismert fogalmak áttekintése

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Java programozási nyelv 5. rész Osztályok III.

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Programozás C++ -ban 2007/1

OOP #14 (referencia-elv)

Programozás módszertan p.1/46

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Java II. I A Java programozási nyelv alapelemei

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Interfészek. PPT 2007/2008 tavasz.

Informatika terméktervezőknek

Programozás C és C++ -ban

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Java és web programozás

C++ programozási nyelv

Programozás C++ -ban

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

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

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

Programozás II. 6.Öröklés Dr. Iványi Péter

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Bevezetés a programozásba I.

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?

Osztály és objektum fogalma

Java programozási nyelv 4. rész Osztályok II.

Objektumorientált programozás C# nyelven

C++ programozási nyelv

Programozás C és C++ -ban

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

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

- 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]++;

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Bevezetés a programozásba. 11. Előadás: Esettanulmány

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

Programozás C++ -ban 2007/7

Bevezetés a programozásba előadás: Öröklődés

Java II. I A Java programozási nyelv alapelemei

Bevezetés a programozásba I.

Programozás alapjai II. (1. ea) C++

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Programozás alapjai II. (2. ea) C++

Programozás alapjai II. (2. ea) C++

Programozási nyelvek Java

Programozás C++ -ban 2007/4

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

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

Bevezetés a programozásba I.

Pénzügyi algoritmusok

Objektumok inicializálása

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Maximum kiválasztás tömbben

Java és web programozás

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Objektumorientált programozás IX. Osztályok, objektumok

128. AA Megoldó Alfréd AA 128.

Programozási nyelvek Java

Objektumorientált Programozás VI.

Átírás:

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, string osztály Új header fájlok

Új komment C-ben kommentet a /* */ közé lehetett írni Itt már lehet egysorost is (mint Javaban) a //-el Pl. /* A függvény összeszorozza a két paramétert. */ int szoroz(int a, int b) { return a*b; //visszatér a két paraméter szorzatával }

Változók deklarációja C-ben a változókat a blokk elején, együtt kellett deklarálni Itt bárhol lehet (de legkésőbb az első használat előtt) Ciklusváltozó deklarálható a for-ban is for ( int i = 0 ; i < 10 ; i++ ) { cout << i << endl; } // i++; itt már nem él az i változó

Alapértelmezett fv. paraméterek A függvényparamétereknek a deklarációkor megadhatunk alapértelmezett értéket Tetszőleges számú paraméterhez rendelhetünk értéket, akár az összeshez is. Az ilyen függvények meghívásakor legalább annyi paramétert kell átadni, ahánynak nem adtunk alapértelmezett értéket. Az értékkel rendelkező paramétereknek a paraméterlista végén kell szerepelni

Alapértelmezett fv. paraméterek Helyes példák: double oszt(double a, double b=10) { return a/b; } double oszt(double a=5, double b=10) { return a/b; } double oszt(double a, double b) { return a/b; }

Alapértelmezett fv. paraméterek Helytelen példa: double oszt(double a=10, double b) { return a/b; }

Névterek C++-ban a programot hierarchikusan szervezhetjük a névterek segítségével (hasonlóan, mint Javaban a csomagokkal) Egy névtér megszakítható, majd később folytatható, akár fájlokon át is. Használhatjuk közvetlen hivatkozással: std::cout teljes névtér: using namespace std;

Egyszerűbb IO műveletek Az eddigi printf, scanf függvények helyett előre megírt objektumokkal tudunk I/O műveleteket végezni, sokkal egyszerűbben. cout kiíratást végző objektum cin beolvasást végző obejktum cerr hibakimenetre író objektum endl sortörést jelentő objektum Ezek az objektumok az std névtérben vannak (ld. Előző dia) Használatukhoz az iostream headert kell beilleszteni

Logikai adattípus C++-ban bevezették a logikai adattípust bool kulcsszóval tudok ilyet létrehozni. Értéke true vagy false lehet. Kiíratáskor a 0 vagy 1 értéket veszi fel.

Header fájlok A header fájlokat továbbra is az #include paranccsal lehet beilleszteni. A főbb különbség annyi, hogy máshogy hívják őket include után nem írunk.h kiterjesztést a végére. Pl. I/O műveletekhez az iostream header kell Régi C headeröket is használhatunk: elé kell írni egy c betűt és el kell hagyni a kiterjesztést #include <math.h> helyett #include <cmath>

OOP Ismétlés

Objektumorientáltság Az objektum valamilyen valós életből vett egyed Lehet konkrét, fizikai: személy, kártya, autó Lehet konkrét, nem fizikai: kurzus, hozzászólás Minden objektumot három fontos jellemző ír le Állapot milyen? Viselkedés mit tud csinálni? Identitás ki is ő? A fenti példák mindegyike rendelkezik mindhárommal

Állapot Az objektumot jellemezhetjük a tulajdonságaival (attribútumok) Minden tulajdonság sokféle értéket vehet fel (pl. születési év bármilyen egész szám lehet) Az objektum állapota a tulajdonságnak egy bizonyos kombinációja Pl. egy hallgató állapota lehet 1998-ban született, aktív féléves, 3.5 az átlaga és ABCEABC.SZE az EHA kódja

Viselkedés Az a mód, ahogy viselkedhet, reagálhat külső kérésekre Megmondja, hogy mit csinálhat és azt hogyan teszi Ezeket az objektum metódusai (~függvény) írják le Pl. a hallgató vehet fel vizsgát, adhat le vizsgát, passziváltathatja magát Tehát akkor lesz egy vizsgatfelvesz(), egy vizsgatlead() és egy passzivaltat() metódusa

Identitás Minden egyes objektum egyedi Még akkor is, ha mindenük egyforma A valóságban is, attól, hogy valakik ugyan arra a kurzusra járnak, ugyan abban az évben születtek, még különböző emberek Ettől függetlenül mégis hasonlítanak egymásra Ugyan azokkal a tulajdonságokkal jellemezzük őket Ugyan azokat tudják csinálni

Osztály Az osztály lesz az, ami tárolja a hasonlóságot Itt írjuk le, hogy milyen (mik az attribútumai) Miket tud csinálni (milyen metódusai vannak) Hogy kapcsolódnak más objektumokhoz Az osztály olyasmi lesz az objektumnak, mint az adattípus a változónak, tehát ez lesz a típusa

Objektum Az osztály egy konkrét példánya az objektum Ennek a létrehozását példányosításnak hívjuk Egy osztályból több objektum is lehet Egy objektum csak egy osztály példánya lehet

OOP paradigma alappillérei Abstraction Ami az osztályra tartozik, az legyen is ott Ami csak rá tartozik, azt csak ő lássa Encapsulation + Data hiding Encapsulation Minden, ami összetartozik (adattag, metódus), zárjuk össze egy osztályba Inheritance A közös részeket át lehet örökíteni Újrafelhasználható(bb) kódot írhatunk Polymorphism Egy objektum helyzettől függően több alakot is felvehet Gyerek lehet ős, ős nem lehet gyerek

Öröklődés Az öröklés az OOP paradigma egyik pillére Ha egy osztályt örököltetünk egy másikból, akkor az új (gyerek) megkapja a régitől (ős) az összes tulajdonságát és viselkedését Ezeket módosíthatja (ha engedjük), illetve kiegészítheti újakkal Overriding: ha definiálunk egy metódust, amilyen már volt az ősben, akkor felülírom, futásidőben dől el, hogy melyiket hívjuk

Öröklődés Az öröklődés specializáció/általánosító kapcsolat, attól függ, honnan nézzük A gyermek specializálja (szűkíti) az őst Az ős osztály a gyereknek egy általános (bővebb) esete Többszörös öröklődés: Javaban nincs! - de C++-ban lesz Egyszerre több dolog öröklése máshogy van megoldva, ld. később

Láthatóság OOP paradigma egyik fontos eleme: egységbezárás (encapsulation) Zárjuk össze és rejtsük el a külvilág elől, amit csak lehet Ezt a láthatóság módosításával érhetjük el

Polimorfizmus Leszármazott típusú osztályt mindig használhatunk ős típus helyett Metódus paraméterként Tömbben Objektum referenciánál Visszatérési értékként Őst viszont nem tudunk leszármazottra alakítani Kivéve, ha eredetileg leszármazott típusú volt és upcast miatt lett ős Ld. később

Konstruktor Speciális metódus, ami az objektum példányosításakor hívódik meg Példányosítást már nem tudja megakadályozni Kezdeti teendők megvalósítására szolgál A neve ugyan az, mint az osztálynak Nincs visszatérési értéke Lehet többféle paraméterlistája is lehet - overloading Általában public Minden osztálynak van default konstruktora

Overloading Azonos metódusnév, különböző paraméterlista A híváskor kapott paraméterek alapján dönt