Konverziós operátorok

Slides:



Advertisements
Hasonló előadás
C++ programozási nyelv Gyakorlat hét
Advertisements

Kifejezések 2+3 Egy egyszerű kifejezés… © Pasztuhov Dániel, www.programozas-oktatas.hu.
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
8. előadás (2005. április 19.) Pozicionálás fájlban (folyt.) I/O mechanizmus váltás Hibakezelő függvények Változók tárolási osztályai Parancssor-argumentumok.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Függvények, mutatók Csernoch Mária.
Mutatók, tömbök, függvények
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Java Típuskonverziók.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
C# tagfüggvények.
C# tagfüggvények.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
C++ alapok, harmadik óra
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
További vektor, mátrix algoritmusok
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Készítette: Csíki Gyula
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 4. Gyakorlat Függvény paraméterek, dinamikus.
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
2012. március 21. Paulik Áron.  Ha a függvényünk feladata olyan, hogy nem lenne értelme a visszatérési értéknek, vagy csak nincs rá szükség, void típusúként.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Típuskonverzió a C++ nyelvben
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Struktúrák a C nyelvben 1 Akkor használjuk, ha az egy egyedre jellemző különböző típusú adatokat együtt akarjuk tárolni. Lényegében típusdeklaráció. A.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Informatikai gyakorlatok 11. évfolyam
a programegységek között
Kifejezések C#-ban.
A C++ programozási nyelv
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
String osztály létrehozása
A struct, az union és az enum típus
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Könyvtári függvények I. Input / output kezelés függvényei
Öröklődés Objektumok közötti speciális kapcsolat.
Az objektum-orientáltság
Feladat Készítsünk programot, amely ciklikusan egy egyenest forgat 8 fokonként, mialatt 3 db vektort mozgat és forgat 5, 6 ill 7 fokonként, és kijelzi.
Függvénysablonok használata
Előadás másolata:

Konverziós operátorok Az átdefiniálható operátorok külön családját képezik az ún. konverziós (cast) operátorok. Konverzió kijelölése: (céltípus) változó Értékadásban (ha két oldalon eltérő típus van) és függvényhíváskor (átadott objektum típusa a deklarációban megadottól eltér) automatikus típuskonverzió megy végbe. Implicit típuskonverzió.

Konverziós operátorok átdefiniálása Példa: Két double koordinátát tartalmazó vektor objektumok és az MS_Windows-ban megszokott forma ( egy vektor egy long típusban kerül tárolásra úgy, hogy a long alsó helyiértékű 16 bitje az x, felső helyiértékű 16 bitje az y koordináta) között végzünk átalakításokat.

Típuskonverzió Vector vec ( 1.0, 2.5 ) ; long point = 14L + 36 L << 16 ) ; //14, 36 koordinátájú pont extern f (long) ; extern g (Vector) ; vec = (Vector ) point ; //explicit vec = point ; //implicit g (point ) ; //implicit point = (long ) vec ; //explicit point = vec ; //implicit f (vec ) ; //implicit

Konverziós operátorok átdefiniálása Újdonság a C++-ban: osztállyal gyártott objektumokra is definiálhatunk átalakító operátorokat. Két eset: - osztállyal definiált típusról alakítunk át más típusra ( ami lehet más osztállyal definiált típus vagy beépített típus). - Beépített vagy osztállyal definiált típust konvertálunk osztállyal definiált típusra.

Konverzió osztállyal definiált típusról A Vector -> típus (jelen esetben long) átalakítást kell megvalósítanunk, amely a Vector osztályban egy operator típus ( ) ; tagfüggvénnyel lehetséges. Ehhez a tagfüggvényhez nem lehet visszatérési típus és nem lehet argumentum sem.

Megvalósítás class Vector { double x, y ; public: operator long ( ) { return ((long) x + (long) y <<16 ) ; } }

Beépített vagy osztállyal definiált típust konvertálunk osztállyal definiált típusra Amennyiben egy objektumot akarunk létrehozni egy más típusú változóból, olyan konstruktort kell készíteni, ami argumentumként a megadott típust fogadja el. A long -> Vector átalakításhoz tehát a Vector osztályban egy long argumentumú konstruktor szükséges:

Példa class Vector { double x, y ; public: Vector ( long lo) { x = lo & 0xffff; y = lo >>16 ; }

Szabványos I/O Az operátor átdefiniálás jellegzetes alkalmazása a C++ szabványos I/O könyvtára. Egy változó beolvasása cin >> változó //szabványos inputról Egy változó kiírása cout << változó //szabványos outputra cerr << változó //szabványos hibafájl

Cin és cout objektumok C könyvtári függvények: C++ átdefiniált operátorok #include <stdio.h> #include <iostream.h> main() { main() { int i; int i; i= 5; i = 5; printf (“Hi%d\n”, i); cout<<“Hi”<<i<<‘\n’; scanf (“%d”, &i); cin>>i; } } C++: amennyiben több változót akarunk kiírni vagy beolvasni, azok láncolhatók. Szabványos I/O C++ megoldása mögött a << és >> operátorok átdefiniálása áll.

Nézzük meg a cin és cout objektumok típusát meghatározó istream és ostream osztályokat, melyek az iostream.h deklarációs fájlban találhatók: class ostream { public: ostream& operator<<( int i); //lehetséges implementáció printf(“%d”, i); } ostream& operator<<( char *i); ostream& operator<<( char); } ; extern ostream cout;

istream osztály class istream { public: istream& operator>>( int& i); //lehetséges implementáció {scanf(“%d”, &i); } } ; extern istream cin;

Megoldás: - vagy az ostream osztályt kell kiegészíteni egy Terjesszük ki a szabványos kimenetet a Vector osztályra, úgy, hogy egy v vektor a cout<<v utasítással kiírható legyen! Megoldás: - vagy az ostream osztályt kell kiegészíteni egy operator<<(Vector v) tagfüggvénnyel - vagy egy globális operator<<(ostream& s, Vector v) függvényt kell létrehozni:

Vector típusú adat kiírása ostream& operator<< (ostream& s, Vector v) { s<< v.GetX() << v.GetY() ; return s ; }

Láncolás biztosítása Az első ostream típusú cout objektumot referenciaként vesszük át és visszatérési értékben is referenciaként adjuk vissza. A kapott cout objektum visszatérési értékként való átadására azért van szükség, hogy a megismert láncolás működjön.

Egy újabb feladat (CCurrency osztály létrehozása) class CCurrency {private: long Dollars; int Cents; public: cCurrency() { Dollars = Cents = 0; } cCurrency(long Dol, int Cen) SetAmount ( Dol, Cen) ;

Értékek visszaadása void GetAmount(long *Pdol, int *PCen) { *Pdol = Dollars; *Pcen= Cents; }

Értékek megadása void SetAmount(long Dol, int Cen) { Dollars = Dol + Cen/100; Cents = Cen % 100; }

Adattagok megjelenítése void PrintAmount() { cout.fill(„0”) ; cout.width (1) ; cout<<„$”<<Dollars << „. „ ; cout.width(2) ; cout << cents % 100 ; }

operator+ () class CCurrency { … public: CCurrency operator+ (CCurrency Curr) CCurrency Temp (Dollars + Curr.Dollars, Cents + Curr.Cents); return Temp; } };

operator+() más megoldásasl CCurrency operator+ (CCurrency Curr) { return CCurrency (Dollars + Curr.Dollars, Cents + Curr.Cents); }

Ccurrency Amount1 (12,95); Ccurrency Amount2 (4,38); Ccurrency Total; Total = Amount1 + Amount2; Amount1.operator+(Amount2);

operator+() túlterhelése CCurrency operator+ (long Dol) { return CCurrency (Dollars + Dol, Cents); } Ccurrency Adv (235, 42); Adv = Adv + 100; Adv.operator+(100);

100.operator+(Adv); //globális metódus CCurrency operator+ (long Dol, CCurrency &Curr) { return CCurrency (Dol+Curr.Dollars + Curr. Cents); }

class CCurrency { … friendCCurrency operator+ (long Dol, CCurrency &Curr); }; Adv= 100 + Adv;