Típuskonverzió a C++ nyelvben

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Objective- C Bereczki Gréta Tamara
Programozási Nyelvek (C++) Gyakorlat Gyak 03.
JavaScript.
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.
Sztringek.
Bevezetés a Java programozásba
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
Programozás II. 3. Gyakorlat C++ alapok.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Függvények, mutatók Csernoch Mária.
Java Típuskonverziók.
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
Programozás I. Horváth Ernő.
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/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
C# tagfüggvények.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
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.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Kivételkezelés a C++ nyelvben Bevezetés
Bevezetés a C++ programozási nyelvbe
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
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ú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Java programozási nyelv Filekezelés
Java programozási nyelv Metódusok
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Egyenesvonalú (lineáris) adatszerkezetek
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Programtervezés, programozás I. 2.5 tömbök,stringek
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
Kifejezések C#-ban.
A C++ programozási nyelv
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
String osztály létrehozása
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Konverziós operátorok
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.
Előadás másolata:

Típuskonverzió a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék Ficsor Lajos Típuskonverzió a C++ nyelvben

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-ből örökölve) Standard típuskonverzió osztálytípusok között Programozó által definiált típuskonverziók Ficsor Lajos Típuskonverzió a C++ nyelvben

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* Ficsor Lajos Típuskonverzió a C++ nyelvben

Felhasználó által definiált konverziók 1. Tetszőleges típusról osztálytípusra Az egy argumentumú konstruktor az argumentuma típusáról történő konverziót definiál és engedélyez! Osztálytípusról tetszőleges típusra Speciális tagfüggvény (konverziós operátor) operator <típus> () ahol típus tetszőleges típusnév Sem visszatérési érték, sem argumentum nem adható meg. A konverziós operátorok öröklődnek. Ficsor Lajos Típuskonverzió a C++ nyelvben

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 lehetővé tesz! (Akkor is, ha csak inicializáció miatt írtuk.) Kivétel: explicit konstruktor! A fordítóprogram többlépcsős konverziót is alkalmaz, ha azzal típusegyezést tud elérni. Ficsor Lajos Típuskonverzió a C++ nyelvben

Az explicit konstruktor Az explicit kulcssszóval minősített konstruktor nem definiál konverziót Csak az inicializálást igénylő esetekben hívódik meg. Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben 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); }; Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex24.C (folyt.) 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(); }; Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex24.C (folyt.) void main(void) { // char* => CString konverziót hajt végre CString lakcim = "Kiss Aladár u. 3"; lakcim.kiir();   int i = hossz ("Hello"); cout << "\nHossz=" << i; Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex24.C (folyt.) // 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(); Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex24.C (folyt.) // int => CString konverziót hajt végre i = hossz (1234); cout << "\nHossz=" << i;   // Nincs olyan konverzió, amivel // típusegyezőség hozható létre // Az alábbi két sor tehát hibajelzést // eredményezne //int *p; //i = hossz (p); Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex24.C (folyt.) // 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’); } Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex25.C // 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; }; Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex25.C (folyt.) void main(void) { // char* => CString konverziót hajt végre CString lakcim = "Kiss Aladar u. 3"; lakcim.kiir();   // CString => char* konverziót hajt végre, // explicit kérés miatt cout << "\n" << (char*) lakcim; Ficsor Lajos Típuskonverzió a C++ nyelvben

Típuskonverzió a C++ nyelvben cppex25.C (folyt.) // Implicit CString => char* konverziót // hajt végre az strcpy fgv. prototípusa // miatt char szoveg[50]; strcpy(szoveg,lakcim); cout << "\n" << szoveg; } Ficsor Lajos Típuskonverzió a C++ nyelvben