C++ programozási nyelv Konstruktorok Gyakorlat



Hasonló dokumentumok
C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv

Java programozási nyelv 4. rész Osztályok II.

C++ programozási nyelv Struktúrák a C++ nyelvben

Osztályok. 4. gyakorlat

Programozás II. 4. Dr. Iványi Péter

Objektumok inicializálása

C++ programozási nyelv

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Pénzügyi algoritmusok

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

3. Osztályok II. Programozás II

C++ programozási nyelv

Java és web programozás

Osztály és objektum fogalma

Mutatók és mutató-aritmetika C-ben március 19.

Programozás C++ -ban

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

Java programozási nyelv 5. rész Osztályok III.

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Java és web programozás

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

Programozás II gyakorlat. 8. Operátor túlterhelés

500. CC Megoldó Alfréd CC 500.

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

C++ programozási nyelv

Programozas 1. Strukturak, mutatok

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Programozás C++ -ban 2007/4

Java és web programozás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java programozási nyelv

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Származtatási mechanizmus a C++ nyelvben

500. AA Megoldó Alfréd AA 500.

Programozás II. 6.Öröklés Dr. Iványi Péter

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

5. Gyakorlat. struct diak {

Programozás C++ -ban 2007/7

Programozási Nyelvek: C++

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Elemi Alkalmazások Fejlesztése II.

1. Alapok. Programozás II

Java programozási nyelv 6. rész Java a gyakorlatban

Programozás I gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

OOP: Java 8.Gy: Abstract osztályok, interfészek

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozás C++ -ban

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Programozás alapjai II. (2. ea) C++

Programozás alapjai II. (2. ea) C++

OOP #14 (referencia-elv)

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

A C programozási nyelv III. Pointerek és tömbök.

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

8. gyakorlat Pointerek, dinamikus memóriakezelés

A C programozási nyelv III. Pointerek és tömbök.

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozás alapjai II. (4. ea) C++

Objektumorientált programozás C# nyelven

Szoftvertechnológia alapjai Java előadások

Programozás alapjai. 10. előadás

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Objektum orientált kiterjesztés A+ programozási nyelvhez

Programozás módszertan

Pénzügyi algoritmusok

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Virtuális függvények (late binding)

Kivételek, kivételkezelés a C++ nyelvben

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Információs Technológia

Számítógép és programozás 2

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Bevezetés a programozásba I.

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Programozás II. labor

Programozás C++ -ban

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

PHP5 Új generáció (2. rész)

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Átírás:

C++ programozási nyelv Konstruktorok Gyakorlat Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. október A C++ programozási nyelv Soós Sándor 1/17

Tartalomjegyzék A házi feladat tanulságai 1. eset 2. eset (eset02.dsw) 3. eset 4. eset Tömbök 1) Statikus (eset04_1.dsw) 4. eset Tömbök 2) Fix méretű, dinamikus 4. eset Tömbök 3) Változó méretű, dinamikus 5. eset - Mutatótömbök Példa mutatótömbökre Kompozíció, beágyazás Hogyan viselkednek a tagobjektumok? (tagobj1.dsw) A C++ programozási nyelv Soós Sándor 2/17

A házi feladat tanulságai A szorzás és az osztás nem felcserélhető, ha egész számok körében dolgozunk. túlcsordulás alulcsordulás koltseg = (kilometer / 100) * fogyasztas * benzinar; a kifejezés kiértékelése attól függ, hogy milyen típusúak a változók A C++ programozási nyelv Soós Sándor 3/17

1. eset Mi történik akkor amikor a következő kódot írjuk a programba? Valami v; Lefoglalja a memóriát Lefuttatja a konstruktort Mi történik, ha a Valami osztályban nincsen default konstruktor? Valami *vp; Létrehoz egy pointert Nem fut konstruktor vp = &v; // a v változó címét tesszük vp-be A C++ programozási nyelv Soós Sándor 4/17

2. eset (eset02.dsw) { Valami v, *vp; v.x = 7; vp = &v; delete vp; // formailag helyes, de hibás, nem new-val // foglalt területet szabadít fel!!! } A C++ programozási nyelv Soós Sándor 5/17

3. eset vp = new Valami[3]; delete [] vp; Ehhez kell legyen a Valamiben default konstruktor! Vagy mi hozzuk létre, vagy engedjük, hogy a C++ hozza létre. A C++ programozási nyelv Soós Sándor 6/17

4. eset - Tömbök 1) Statikus (eset04_1.dsw) A tömb nem ismeri a saját méretét, de kiszámítható: Valami t1[10]; double dt[3]; int i; for ( i = 0; i < sizeof(dt); i++ ) dt[i] =0; // sizeof visszaadja a változó méretét bájtban!!! helyesen: for ( i=0; i<(sizeof(dt) / sizeof(double)); i++ ) dt[i] =0; vagy: for ( i=0; i<(sizeof(dt) / sizeof(dt[0])); i++ ) dt[i] =0; A C++ programozási nyelv Soós Sándor 7/17

4. eset - Tömbök 1) Statikus (eset04_1.dsw), folyt A tömb mérete kiszámítható a sizeof operátorral, de... void f( double P[] ) { for (int i=0; i<sizeif(p)/sizeof(double); i++ ) P[i] = 0; // sizeof(p): a pointer méretét adja vissza } A fv.-ben nem tudom a tömb méretét, vagy át kell adni a méretet, vagy lezárót kell használni Egy tömb neve önmagában is cím, kiírható elé az &, de el is hagyható. A C++ programozási nyelv Soós Sándor 8/17

4. eset - Tömbök 2) Fix méretű, dinamikus double *dp; int n, n_adat;... n=3;... dp = new double[n]; A tömb mérete 2 dolgot jelent: a teljes mérete, a hasznos adatok száma A C++ programozási nyelv Soós Sándor 9/17

4. eset - Tömbök 3) Változó méretű, dinamikus Ehhez ugyanarra van szükség, mint az előző esetben. double *dp; int n, n_adat; A növeléshez új tömböt foglalok átmásolom az adatokat a régi tömböt felszámolom Ami összetartozik, azt tegyük egy osztályba! A C++ programozási nyelv Soós Sándor 10/17

5. eset - Mutatótömbök Itt is megkülönböztethetjük a 4. eset alatti 3 alesetet. 1) Statikus Valami *vt[3]; int n_adat; Könnyen mozgathatóak az elemek, pl. rendezés Akár több mutató tömb is mutathat ugyanazokra az elemekre. Ekkor is felmerül a "gazdája-nem gazdája probléma! Mi is volt ez? A C++ programozási nyelv Soós Sándor 11/17

Példa mutatótömbökre Valami v1 Valami *p[8] [0] [1] [2] [3] [4] [5] = NULL [6] = NULL [7] = NULL Valami v2 Valami v3 Valami v4 [0] Valami *q[8] [1] [2] [3] [4] [5] = NULL [6] = NULL [7] = NULL Valami v5 A C++ programozási nyelv Soós Sándor 12/17

Kompozíció, beágyazás Nem szerencsés túl sok adatot egymás mellett tárolni egy strukturában. Az összetartozó adatokat fűzzük össze egy-egy kisebb struktúrába! Ezeket nevezzük tagobjektumoknak. Például emberek adatait szeretnénk nyilvántartani: Név Otthoni telefon Mobiltelefon Vezetéknév Keresztnév Előtag (Dr, Prof, Id, Ifj,...) Lakcím Irányítószám Város Utca Ideiglenes lakcím Irányítószám Város Utca Hogyan lenne célszerű csoportosítani az adatokat? Körzetszám Hívószám Munkahely A C++ programozási nyelv Soós Sándor 13/17 Cégnév Irányítószám Város Utca Körzetszám Hívószám Munkahelyi telefon Körzetszám Hívószám Mellék

Hogyan viselkednek a tagobjektumok? class Tag{ public: Tag() { printf("tag::tag\n"); } }; class Valami{ public: Tag t; }; int main() { Valami v; return 0; } // Kiírja: Tag::Tag A C++ programozási nyelv Soós Sándor 14/17

Hogyan viselkednek a tagobjektumok? A Valami generált konstruktora meghívja a tagobjektumok konstruktorait. Gond van, ha valamiért nem tud lefutni egy beágyazott tag konstruktora! Ha a Tag-ban nincs konstruktor, akkor létrehozza a fordító. Ha tudja! class Tag{ public: Tag( int x ) { printf("tag::tag(x)\n"); } }; Így gond lesz, mert nem tudja legyártani a default konstruktort. A C++ programozási nyelv Soós Sándor 15/17

Hogyan viselkednek a tagobjektumok? (tagobj1.dsw) class Tag{ public: Tag() { printf("tag::tag\n"); } }; class Valami{ public: Valami() { printf("valami::valami\n"); } Tag t; }; Ekkor is lefut a Tag konstruktora, milyen sorrendben? Tag::Tag Valami::Valami A destruktorok éppen fordítva! A C++ programozási nyelv Soós Sándor 16/17

Hogyan viselkednek a tagobjektumok? Mi történik ebben az esetben? class Valami{ public: Valami() { printf("valami::valami\n"); } Tag *tp; }; Hogyan kezelhetjük ezt a pointert? Ismét a gazdája-nem gazdája kérdéshez jutunk. A C++ programozási nyelv Soós Sándor 17/17