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

UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.

Hasonló előadás


Az előadások a következő témára: "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D."— Előadás másolata:

1 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D tömbök, copy constructor

2 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstansok Fajtái:  Egyszerű konstans  Konstans pointerek  Konstans függvényparaméterek  Konstans visszaadott érték  Konstans függvények  Konstans osztály adattag

3 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egyszerű konstans  A C nyelvben nem volt lehetőség valódi konstans létrehozására, csak definiálhattunk egy konstans értékhez egy nevet: #define TRUE 1 Hátránya, hogy típustalan az érték.  C++: const  Példa: const int a = 5;  Dekralációnál értéket kell neki adni!

4 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans pointerek 1  3 fajtája létezik  Ha a const a típus elé tesszük, akkor a mutatott érték lesz konstans: char t[ 3 ] = { 'a', 'b', 'c' }; const char* p1 = t; // *p1 = 'a'; FORDÍTÁSI HIBA p1++; // Itt a mutatott érték nem változik, mert még mindig a t-re mutat a p1.

5 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans pointerek 2  Ha a const kulcsszót a változó neve elé írjuk, akkor a változó lesz konstans: char* const p2 = t; *p2 = 'd'; // p2++; FORDÍTÁSI HIBA

6 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans pointerek 3  Az előző 2 kombinációja: const char* const p3 = t; // *p = 'd'; FORDÍTÁSI HIBA // p++; FORDÍTÁSI HIBA

7 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans függvényparaméterek  A függvények paraméterei is lehetnek konstansok, ilyenkor ezeknek a változóknak az értékei nem változtathatóak meg, különben fordítási hibát kapunk.  Példa: void Fuggveny( const int a ) { a++;// FORDITASI HIBA }

8 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans visszaadott érték  Megtehetjük, hogy olyan értéket adunk vissza függvény visszatéréskor, ami konstans, így nem lehet azt megváltoztatni.  Általában akkor használjuk, ha valamilyen osztály adattagot adunk vissza pointer vagy referencia formában.

9 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans visszaadott érték  Példa: class Simple { private: double* array; public: //… const double* GetArray() { return array; } //… };

10 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans függvények  Konstans függvények olyan függvények, melyek nem változtatják meg az objektumuk állapotát.  A const kulcsszót a függvény paramétereket lezáró zárójel mögé kell tenni.

11 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans függvények  Példa: class Simple { private: double* array; public: //… const double* GetArray() const { return array; } //… };

12 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konstans osztály adattag  Osztály definíción belül tilos a változóknak értéket adni (kivéve static const int/char).  Ezért a konstans osztály adattagokat a konstruktorban kell inicializálni „függvényes” módszerrel: class Simple { public: const int m_ia; const double m_db; Simple() : m_ia( 10 ), m_db( 5.5 ) { } };

13 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Memóriaterületek C++-ban elérhető memóriaterületek:  Heap: dinamikusan foglalt objektumok, addig léteznek, míg nem töröljük őket…  Stack: verem. Adott blokkon belül létezik, a blokk végeztével automatikusan felszabadul.  Static: a program indulásakor már inicializálódik, a program teljes futása során létezik. Pontosan egy példány található static adattagokból a memóriában.

14 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Statikus változók  Hamarabb jönnek létre mint az objektumok (program indulásakor)  Nem kell objektum a használatukhoz.  Egyetlen egy példány létezik a memóriában.  Hivatkozni rájuk: Osztálynév::statikus_változó_neve

15 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Statikus osztály adattagok  Dekraláljuk a statikus osztály adattagot.  Az osztály definíción kívül újra dekralálni kell elérési úttal ( és értékkel ) együtt ( általában a cpp file elején ). Nem kell kiírni újra a static kulcsszót.  Példa: class Simple { private: static int b; }; int Simple::b = 10;

16 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Statikus függvények  Statikus függvény csak statikus adattagot használhat és statikus függvényt hívhat.  Statikus függvényen belül nincs this.  Ha a statikus függvény definíciója és implementációja külön van, akkor az implementációs résznél nem kell újra kiírni a static kulcsszót.

17 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Dinamikus 2D tömbök  Dinamikus 2D-s tömbökre dupla pointerrel hivatkozunk. double** matrix;  new-val foglalunk N méretű X típusú pointer tömböt.  Ezután minden pointerrel rámutatunk M méretű X típusú tömbre.

18 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Dinamikus 2D tömbök  Példa: double** matrix = new double*[ N ]; for ( int i = 0; i < N; i++ ) matrix[ i ] = new double[ M ];  Hivatkozás: matrix[ i ][ j ] = 0.1;  Felszabadítás: for ( int i = 0; i < N; i++ ) delete[] matrix[ i ]; delete[] matrix;

19 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Copy constructor  Segítségével kész objektumokat tudunk lemásolni.  Ha egy osztály nem tartalmaz dinamikus adattagot, akkor a másolás egyszerű (a fordító is megtudja tenni), mivel bitről bitre lemásolja az objektumot. Ha tartalmaz dinamikus adattagot, akkor ez a másolás nem jó, mivel csak a pointer fog lemásolódni és ezzel létre jön 2 objektum, ami azonos memória területre mutatnak.  Egyetlen paramétere a másolandó objektum referencia.  A másolandó és új objektumnak meg kell egyezniük.

20 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Copy constructor  Példa: class Simple { private: double* array; int size; public: Simple( int size ) : size( size ) { array = new double[ size ]; } ~Simple() { delete[] array; } //copy konstuktor Simple( Simple& other ) { size = other.size; array = new double[ size ]; for ( int i = 0; i < size; i++ ) array[ i ] = other.array[ i ]; } };


Letölteni ppt "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D."

Hasonló előadás


Google Hirdetések