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

Típuskonverzió a C++ nyelvben

Hasonló előadás


Az előadások a következő témára: "Típuskonverzió a C++ nyelvben"— Előadás másolata:

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

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

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

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 <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

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

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

7 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

8 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

9 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

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

11 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

12 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

13 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

14 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

15 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


Letölteni ppt "Típuskonverzió a C++ nyelvben"

Hasonló előadás


Google Hirdetések