Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 1 Típuskonverzió a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék."— Előadás másolata:

1

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

3 Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 2 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

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

5 Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 4 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 () 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.

6 Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 5 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.

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

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

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

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

11 Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 10 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 = ; pi.kiir();

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

13 Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 12 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 C String (int szam) // deklarációt használva. // Ekkor írható az alábbi: CString betu = String(’a’); }

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

15 Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 14 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;

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


Letölteni ppt "Ficsor Lajos Típuskonverzió a C++ nyelvben CPP3 / 1 Típuskonverzió a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék."

Hasonló előadás


Google Hirdetések