Globális operátor overloading

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

Kivételkezelés a C++ nyelvben Bevezetés

Pénzügyi algoritmusok

Programozás módszertan

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

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

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

Osztály és objektum fogalma

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

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

Java IX. telkezelés a Java-ban

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

Java IX. telkezelés a Java-ban

és az instanceof operátor

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

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

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

Java programozási nyelv 9. rész Kivételkezelés

Osztályok. 4. gyakorlat

Pénzügyi algoritmusok

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

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.

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

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

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

Programozás I. Első ZH segédlet

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozá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]++;

Programozási alapismeretek 4.

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

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

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

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

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

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Származtatási mechanizmus a C++ nyelvben

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

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

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

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

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?

Bevezetés a Python programozási nyelvbe

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

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

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

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?

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

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

Objektumorientált programozás C# nyelven III.

Programozás C++ -ban

Objektumok inicializálása

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

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

500. AA Megoldó Alfréd AA 500.

503.AA Megoldo Arisztid 503.A

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

Objektum-orientált programozás

Web-technológia PHP-vel

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

1. Alapok. Programozás II

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

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozási nyelvek Java

Programozás II gyakorlat. 6. Polimorfizmus

Java programozási nyelv

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

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

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Java és web programozás

Java és web programozás

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

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

C++ programozási nyelv

Java és web programozás

Már megismert fogalmak áttekintése

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

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

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

Öröklés és Polimorfizmus

Programozási nyelvek II.: JAVA

Bánsághi Anna

Programozási nyelvek (ADA)

Objektumorientált programozás C# nyelven

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

7. K: JAVA alapok Konzultáció

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ás C és C++ -ban

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

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

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Programozási Nyelvek: C++

5. Gyakorlat. struct diak {

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Programozási nyelvek Java

Átírás:

Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, << és >> operátorok Kivételkezelés, IO library

Globális operátor overloading Előző alkalommal megnéztük, hogy lehet kétoperandusú operátort felüldefiniálni Ekkor a bal oldali operandus volt az objektum, amire meghívtuk az operátort, a jobb oldali operandust kapja paraméterben Fordítva ez lehetséges?

Globális operátor overloading Pl. az összeadás a valóságban felcserélhető művelet Nálunk is? - Nem Tort t1(1, 2); int a = 3; Tort t2 = t1 + a; //ez működhet Tort t3 = a + t1; //ez nem működik Ez azért van, mert a bal oldali operandus típusára (int) nem létezik operátor, aminek a jobb oldali operandusa Tort

Globális operátor overloading A megoldás az, hogy definiáljuk a másik operandusra is ezt az operátort Ez sokszor nem lehetséges: Bal oldali operandus primitív típus (ld. előbb) Bal oldali osztályhoz nem férünk hozzá (<< felüldefiniálása, ld. Később) Megoldás a globálisan megvalósított operátor overloading

Globális operátor overloading Ekkor az operátort nem az osztály metódusaként, hanem egy külső függvényként definiáljuk Két paramétere lesz, a két operandus Nincs hozzá this pointer A többi része megegyezik az előző esettel Mi a helyzet a privát láthatóságú adattagokkal?

Friend függvények Ha egy metódust friend láthatósággal látunk el, akkor az látni fogja az osztály adattagjait (private-et és protectedet is), de globális függvény lesz Így tetszőleges sorrendben lehetnek az operandusok Szintaxis: class Tort { friend Tort& operator+(int, Tort&); };

Unáris operátorok (++ és --) Beépített típusoknál ismerős a ++ és -- operátor Volt prefix és postfix alakja is Prefix alaknál értelmezhető a múltkori szabály: Az első (egyetlen) operandus saját maga Nincs másik operandus, így paramétere nincs Tort& operator++() { this->m_dszamlalo += this->m_dnevezo; return *this; }

Unáris operátorok (++ és --) A postfix operátort viszont hogy jelöljük? A globális megvalósítás nem megoldás, mert továbbra is csak egy paraméter van Megoldás: adjunk a metódusnak egy int paramétert (amit később nem használunk semmire) Tort& operator++(int) { Tort* old = new Tort(*this); this->m_dszamlalo += this->m_dnevezo; return *old; }

IO stream operátorok << és >> Segítségével a saját osztályainkat is egyszerűen behelyezhetjük bármilyen streambe kb. mint Javaban a tostring() Ez csak globálisan valósítható meg, mert a baloldali operandus mindig a stream Mindig visszatért a streamre mutató referenciával (amibe betettük), hogy láncolható legyen a kifejezés Fontos: implementáláskor mindig a kapott streambe helyezzük az objektumunkat, és ne coutra (vagy egyéb helyre)

Kivételkezelés Alapelve ugyan az, mint Javaban A kivételkezelés lehetővé teszi, hogy reagáljunk a program futása során felmerülő kivételes eseményekre úgy, hogy a vezérlést egy speciálisan erre készített programrésznek (kezelőnek). (Forrás) Szintaxisa is hasonló

Kivételkezelés Kivételt dobni a throw utasítással tudunk Dobhatunk int, char*, saját osztályt vagy kivételosztályt try kulcsszóval jelölhetjük az un. kritikus blokkot, ahol figyeljük a kivételeket catch kulcsszóval jelöljük a kezelő (handler) blokkot ( ) mindent elkap Létrehozhatunk saját kivételosztályt, ha származtatjuk az exception ősosztályból Felüldefiniálhatjuk a what() metódust

IO stream library Két ősosztály: ios_base és ios Típusfüggetlen metódusok streamek számára Ezeknek két leszármazottja az istream és ostream Ennek a kettőnek a leszármazottja pedig az iostream Ennek a példányai a cout, cin és cerr Családfa

Hasznos referenciák IO-hoz istream, ostream fstream, ifstream, ofstream operator<<, operator>>

Hátralévő teendők Következő héten ismétlés, gyakorlás Két hét múlva 2. kötprog (kiírások coospacen) 3-4 hét múlva gyakorlati ZH