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.



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

C++ programozási nyelv

é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

Programozási nyelvek Java

C++ programozási nyelv

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

Elemi Alkalmazások Fejlesztése II.

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.

Osztályok. 4. gyakorlat

Programozás II gyakorlat. 6. Polimorfizmus

Származtatási mechanizmus a C++ nyelvben

Objektumorientált programozás C# nyelven

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

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?

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

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

Öröklés és Polimorfizmus

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

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) {} };

Programozás II. 4. 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

Programozási nyelvek Java

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

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

OOP. Alapelvek Elek Tibor

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

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

C++ programozási nyelv

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

1.AA MEGOLDÓ BERCI AA 1.

PHP5 Új generáció (2. rész)

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

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

Programozási alapismeretek 4.

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

Objektumorientált programozás C# nyelven

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

OOP és UML Áttekintés

Abstract osztályok és interface-ek. 7-dik gyakorlat

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

Objektumorientált paradigma és programfejlesztés Bevezető

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

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

500. AA Megoldó Alfréd AA 500.

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

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

Objektumelvű programozás

Objektumok inicializálása

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

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

Java és web programozás

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

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

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

OOP #14 (referencia-elv)

Globális operátor overloading

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

Fejlett programozási nyelvek C++ Iterátorok

C++ programozási nyelv Konstruktorok-destruktorok

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

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

Osztály és objektum fogalma

Programozás C++ -ban

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

Alkalmazott modul: Programozás

Objektum orientált programozás Bevezetés

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

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

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

BME MOGI Gépészeti informatika 8.

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.

Szoftvertechnológia 4. előadás. Objektumorientált tervezés: általánosítás. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

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

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

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

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

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

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

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

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

Programozás módszertan p.1/46

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

Programozási technológia

Alprogramok, paraméterátadás

Java és web programozás

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

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

117. AA Megoldó Alfréd AA 117.

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Objektumorientált programozás C# nyelven

Már megismert fogalmak áttekintése

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

500. CC Megoldó Alfréd CC 500.

Átírás:

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ő osztály Elvont fogalmat jelenít meg Az absztrakt osztályokhoz általában nem léteznek objektumok (a nyelv megengedné) Általában virtuális függvények nem nagyon rendelhetőek az absztrakt osztályokhoz Például: Jármű (autó, motor, kerékpár, hajó, stb.) Alakzat (háromszög, négyszög, stb.) class CAlakzat virtual void Forgat(int) error("calakzat::rotate"); } virtual void Rajzol() error("calakzat::draw"); } CAlakzat alakz; Nincsen az alakzatról megadva semmi (értelmetlen) Minden műveletre hibát jelez Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 2 / 11

Tisztán virtuális (pure virtual) függvény Egy vitruális függvény az "=0" értékadástól lesz tisztán virtuális függvény Példa: class CAlakzat virtual void Forgat(double) = 0; virtual void Rajzol() = 0; Absztrakt osztálynak (elvont osztály, abstract class) Legalább egy tisztán virtuális függvénnyel rendelkezik Nem példányosítható Példa: CAlakzat alakz; //Hiba Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 3 / 11

Absztrakt osztályok használata Az absztrakt osztályokat felületként (interface) Az absztrakt osztályokat más osztályok bázisosztályaként Példa: class CPont double x,z; class CKor : public CAlakzat void Forgat(double) } ; void Rajzol(); CKor(CPont p, double r); private: CPont m_origo; double m_r; Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 4 / 11

Absztrakt osztályok használata Lehetséges az, hogy nem definiáljuk felül az összes tisztán virtuális függvényt A származtatott osztály is absztrakt osztály marad Lépcsőzetes osztály felépítésre add lehetőséget Példa: class CSokszog : public CAlakzat void Forgat(double) } ; // absztrakt osztály // Rajzol() függvény // nincsen felülírva CSokszog s; // hiba: az osztálynak // nem lehet példánya Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 5 / 11

Absztrakt osztályok használata Lehetséges az, hogy nem definiáljuk felül az összes tisztán virtuális függvényt A származtatott osztály is absztrakt osztály marad Lépcsőzetes osztály felépítésre add lehetőséget Példa: class CSokszog : public CAlakzat protected: list<cpont> m_pontok; void Forgat(double) ; void Rajzol() ; CSokszog s(pont1, pont2...); Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 6 / 11

Tervezés absztrakt osztályokkal A megvalósításolyan részletkérdés legyen, amelyről nem kell tudomást venniük azon felhasználóknak, akiket nem érdekel Az elkészített ősosztály lehetőleg ne tartalmazzon adatokat (Ha igen csak olyanokat, amit minden gyerekosztály haszálni fog.) Érdemes virtuális destruktort alkalmazni (Öröklő osztályok adatainak helyes "eltüntetése") Példa: (irányítástechnikai osztályok ) class CAlap protected: static double m_t; static double m_dt; double m_y; CAlap(double=0); virtual ~CAlap()} static double IdoIncr()return m_t+=m_dt;} static double GetIdo() return m_t;} virtual double Muvelet()=0; virtual void Atrak()} virtual void SetBem(CAlap *)} double GetJel() return m_y;} Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 7 / 11

Template létrehozása C++ Template (sablon) létrehozása Szintaxis: template<class C> class Osztaly_Neve template<class C> Sablon deklarációja következik C típusparamétert fogjuk használni Használata: Osztaly_Neve<char> tc; Osztaly_Neve<int> ti; Osztaly_Neve<Pont> tp; typedef Osztaly_Neve<char> RovidTipus; Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 8 / 11

Template létrehozása C++ Template (sablon) létrehozása Példa Verem kezelése template osztály segítségével TVerem a template osztály neve template<class C> class TVerem C* m_p; TVerem() ; TVerem(const TVerem&) ; Push(C) ; C Pop() ; TVerem<double> dverem; dverem.push(1.123); dverem.pop(); TVerem<int> iverem; Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 9 / 11

Template osztály C++ Template (sablon) létrehozása Használatával nem nővekedik a kód méréte Használatával nem nővekedik a futási idő Template osztály létrehozása előtt érdemes nem template osztályként letesztelni az osztályt Kódoslási és logikai hibák könnyebben detektálhatóak Egyszerűbb hibakeresés Tagjait ugyanúgy deklaráljuk és definiáljuk, mint a "közönséges" osztályok esetén Tagjai maguk is sablonok, paramétereik pedig ugyanazok, mint a sablon osztályéi. template<class C> C TVerem<C>::Pop() // return...; } template<class C> TVerem<C>::TVerem<C>() //.. } Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 10 / 11

Template paraméterek C++ Template (sablon) létrehozása Template osztálynak lehetnek függvényei Template osztály függvényeinek lehetnek paraméterei A paraméterek lehetnek Típust meghatározó template<class T, T def_val> class Cont /*... */ Sablon típusú paramétereik template<class C> C TVerem<C>::Pop() // return...; } template<class C> TVerem<C>::TVerem<C>() //.. } Fodor A. (Pannon Egyetem) Programozás 2010. április 8. 11 / 11