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

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
C++ programozási nyelv Gyakorlat hét
Tömbök C#-ban.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
8. előadás (2005. április 19.) Pozicionálás fájlban (folyt.) I/O mechanizmus váltás Hibakezelő függvények Változók tárolási osztályai Parancssor-argumentumok.
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Dinamikus tömbök.
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.
Bevezetés a Java programozásba
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
2. Gyakorlat Követelmények / „C” ismétlés
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 8. Gyakorlat Operator overloading II.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Mutatók, tömbök, függvények
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/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
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.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
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!’
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
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.
Kivételkezelés a C++ nyelvben Bevezetés
Összetett adattípusok
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 Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
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ú,
Java programozási nyelv Metódusok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 4. Gyakorlat Függvény paraméterek, dinamikus.
Objektum orientált programozás
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
C Programozási alapok.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. Követelmények.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
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.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
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][,
a programegységek között
A C++ programozási nyelv
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
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.
Függvénysablonok használata
Előadás másolata:

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

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

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!

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.

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

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

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 }

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.

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; } //… };

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.

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; } //… };

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 ) { } };

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.

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

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;

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.

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.

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;

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.

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