A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

Hasonló dokumentumok
Objektumok inicializálása

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

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

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

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

Osztály és objektum fogalma

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

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

Programozás módszertan

Osztálytervezés és C++ implementációs ajánlások I.

Programozás C++ -ban

Java II. I A Java programozási nyelv alapelemei

Osztály tervezési szempontok és C++ implementációs ajánlások

Származtatási mechanizmus a C++ nyelvben

Szövegek C++ -ban, a string osztály

5. Gyakorlat. struct diak {

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

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

C++ programozási nyelv Konstruktorok-destruktorok

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

500. AA Megoldó Alfréd AA 500.

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

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

Programozás II gyakorlat. 6. Polimorfizmus

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

Java II. I A Java programozási nyelv alapelemei

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

Öröklés és Polimorfizmus

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

A C programozási nyelv III. Pointerek és tömbök.

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.

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

Bevezetés a C++ programozási nyelvbe

A C programozási nyelv III. Pointerek és tömbök.

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

Programozás C++ -ban

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

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés)

Cekla. Készítette Doxygen Tue Sep :13:44

Objektumorientált programozás C# nyelven

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

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

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

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

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

Pénzügyi algoritmusok

A C# programozási nyelv alapjai

és az instanceof operátor

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

Java és web programozás

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

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

117. AA Megoldó Alfréd AA 117.

Programozási Nyelvek (C++) Összefoglaló

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

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

3. Osztályok II. Programozás II

Osztályok. 4. gyakorlat

A C# PROGRAMOZÁSI NYELV

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

Programozás C++ -ban 2007/4

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

Programozás C++ -ban 2007/7

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

OOP #14 (referencia-elv)

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. Osztályok, Származtatott osztályok. Fodor Attila

Programozás C++ -ban 2007/1

Objektumorientált programozás C# nyelven

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

Pénzügyi algoritmusok

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 programozási nyelv VI. Parancssori argumentumok File kezelés

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

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

Programozás C és C++ -ban

Bevezetés a C++ programozási nyelvbe

500. CC Megoldó Alfréd CC 500.

128. AA Megoldó Alfréd AA 128.

Programozás C++ -ban

Web-technológia PHP-vel

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

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

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

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

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

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

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

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

Java és web programozás

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

Programozási nyelvek Java

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

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

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?

Átírás:

Típuskonverzió a C++ nyelvben Miskolci Egyetem Általános Informatikai Tanszék Típus konverzió a C++ nyelvben CPP3 / 1 Lehetséges konverziók A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók: Standard típuskonverzió az alaptípusokra (a C-bol örökölve) Standard típuskonverzió osztálytípusok között Programozó által definiált típuskonverziók Típus konverzió a C++ nyelvben CPP3 / 2 Automatikus konverzió osztálytípusokra Osztálytípusok között az alábbi automatikus konverziók lehetségesek: származtatott osztály => public bázisosztály származtatott osztály& => public bázisosztály& származtatott osztály* => public bázisosztály* bármilyen osztály* => void* Típus konverzió a C++ nyelvben CPP3 / 3

Felhasználó által definiált konverziók 1. Tetszoleges típusról osztálytípusra Az egy argumentumú konstruktor az argumentuma típusáról történo konverziót definiál és engedélyez! Osztálytípusról tetszoleges típusra Speciális tagfüggvény (konverziós operátor) operator <típus> () ahol típus tetszoleges típusnév Sem visszatérési érték, sem argumentum nem adható meg. A konverziós operátorok öröklodnek. Típus konverzió a C++ nyelvben CPP3 / 4 A konverziók alkalmazása A fordítóprogram mindig jogosult az automatikus konverziók alkalmazására A fordítóprogram jogosult a programozó által definiált konverziók alkalmazására Ez nem tiltható meg! Az egyparaméteres konstruktor mindig konverziót is lehetové tesz! (Akkor is, ha csak inicializáció miatt írtuk.) Kivétel: explicit konstruktor! A fordítóprogram többlépcsos konverziót is alkalmaz, ha azzal típusegyezést tud elérni. Típus konverzió a C++ nyelvben CPP3 / 5 Az explicit konstruktor Az explicit kulcssszóval minosített konstruktor nem definiál konverziót Csak az inicializálást igénylo esetekben hívódik meg. Típus konverzió a C++ nyelvben CPP3 / 6

cppex24.c // Konstruktor mint konverziós operátor class CString { int m_nhossz; char* m_pchszoveg; public: CString (char* st) {m_nhossz = strlen(st); m_pchszoveg = new char [m_nhossz+1]; strcpy (m_pchszoveg,st); }; Típus konverzió a C++ nyelvben CPP3 / 7 CString (int szam) {// Konvertalas egesz szamról stringre }; int milyenhosszu (void)const { return m_nhossz; }; void kiir (void) const { cout << "\n" << m_pchszoveg; }; }; int hossz (CString st) { return st.milyenhosszu(); }; Típus konverzió a C++ nyelvben CPP3 / 8 void main(void) { CString lakcim = "Kiss Aladár u. 3"; lakcim.kiir(); int i = hossz ("Hello"); cout << "\nhossz=" << i; Típus konverzió a C++ nyelvben CPP3 / 9

// int => CString konverziót hajt végre CString szam = 123; szam.kiir(); // float => int standard konverzió után // int => CString konverzió CString pi = 3.1415; pi.kiir(); Típus konverzió a C++ nyelvben CPP3 / 10 // int => CString konverziót hajt végre i = hossz (1234); cout << "\nhossz=" << i; // Nincs olyan konverzió, amivel // típusegyezoség hozható létre // Az alábbi két sor tehát hibajelzést // eredményezne //int *p; //i = hossz (p); Típus konverzió a C++ nyelvben CPP3 / 11 // char => int konverzió után // int => CString konverzió. // Biztosan ezt vártuk? CString betu = a ; //A fenti sor hibajelzést generál az // explicit CString (int szam) // deklarációt használva. // Ekkor írható az alábbi: CString betu = String( a ); } Típus konverzió a C++ nyelvben CPP3 / 12

// Példaprogram konverziós operátorokra class CString { int m_nhossz; char* m_pchszoveg; public: CString (char* st) {... }; operator char* () { return m_pchszoveg; }; void kiir (void) { cout << "\n" << szoveg; }; Típus konverzió a C++ nyelvben CPP3 / 13 (folyt.) void main(void) { CString lakcim = "Kiss Aladar u. 3"; lakcim.kiir(); // CString => char* konverziót hajt végre, // explicit kérés miatt cout << "\n" << (char*) lakcim; Típus konverzió a C++ nyelvben CPP3 / 14 (folyt.) // Implicit CString => char* konverziót // hajt végre az strcpy fgv. prototípusa // miatt char szoveg[50]; strcpy(szoveg,lakcim); cout << "\n" << szoveg; } Típus konverzió a C++ nyelvben CPP3 / 15