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

A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat - 12. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.

Hasonló előadás


Az előadások a következő témára: "A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat - 12. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet."— Előadás másolata:

1 A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat - 12. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december

2 A C++ programozási nyelvSoós Sándor 2/15 Tartalomjegyzék ● Kivételek használata ● Paraméterátadás - Visszajelzés ● A külvilággal való kapcsolat ● Saját programhiba jelzése ● Külső program hibáinak kontrollálása ● Külső adatok hibáinak kivédése ● Mi írunk egy függvényt, amit valaki más fog használni ● Kivételek használata speciális esetekre ● Csomagoló, wrapper függvények ● Konstruktorok fajtái, értékadó operátor ● A this pointer ● Mikor hívódnak meg? ● Automatikusan létrehozott konstruktorok, ill. operator=

3 A C++ programozási nyelvSoós Sándor 3/15 Kivételek használata ● A múlt órán megtanultuk a kivételkezelés technikáját. – Hogyan kell használni a kivételkezelést ● Most arról lesz szó, hogy mire használhatjuk ezt az eszközt, a kivételkezelést. – Erre fogunk látni különböző példákat

4 A C++ programozási nyelvSoós Sándor 4/15 Paraméterátadás - Visszajelzés ● A paraméterátadásról sokat szoktunk beszélni, a visszafelé irányú kommunikációról viszont szinte egyáltalán nem. Pedig nagyon fontos dolog. Vissza kell jelezni a sikeres, vagy a sikertelen eredményt is. ● A hívott függvény visszaadhat információt: – visszatérési értékként – cím szerint átadott paraméterekben – esetleg globális változóban ● Az eddigi három esetben a programozó gondosságán múlik, hogy figyel-e a visszajelzésre – kivétel kiváltásával ● Ha a programozó nem kezeli le a hibát, akkor véget ér a program. ● Alaposan meg kell tervezni a visszajelzések rendszerét, éppen úgy, mint a paraméterek átadását!

5 A C++ programozási nyelvSoós Sándor 5/15 A külvilággal való kapcsolat ● Milyen módokon kerülhetünk kapcsolatba a külvilággal? – Külső függvény meghívása – Adatok beolvasása – Az én függvényemet fogják meghívni kívülről ● Mindhárom esetben fel kell készülni a lehetséges hibákra.

6 A C++ programozási nyelvSoós Sándor 6/15 Saját programhiba jelzése // except_alk0.cpp class ProgramHiba{ public: ProgramHiba(int K) { Kod = K; } int Kod; }; void f(int Par) { switch(Par){ case 1: printf("Csinalunk valamit\n"); break; case 2: printf("Itt is\n"); break; default: // programhiba throw ProgramHiba(-1234); break; } int main() { try{ f(3); } catch(ProgramHiba& p){ printf("Programhiba %d\n",p.Kod); } catch(...){ printf("Egyeb kivetel\n"); } return 0; } Felkészülünk a hibás paraméter értékekre Felkészülünk a hibás paraméter értékekre

7 A C++ programozási nyelvSoós Sándor 7/15 Külső program hibáinak kontrollálása // except_alk1.cpp void MasEmberFuggvenye() { int x,y; x = 0; y = 1 / x; } void main() { try{ MasEmberFuggvenye(); } catch(...){ // minden kivételt elkapunk printf("Ejnye, MasEmber.\n"); }

8 A C++ programozási nyelvSoós Sándor 8/15 Külső adatok hibáinak kivédése ● Kivételkezelés nélkül – Lásd except_alk2.cpp ● Kivételkezeléssel – Lásd except_alk3.cpp

9 A C++ programozási nyelvSoós Sándor 9/15 Mi írunk egy függvényt, amit valaki más fog használni ● Nem lehetünk biztosak abban, hogy a függvényünk hívója figyelni fog a visszaadott értékre. ● Kivétel kiváltásával kikényszeríthetjük a hibával való foglalkozást, különben véget ér a program. – Lásd except_alk4a.cpp ! ● Ha egy függvényt valaki úgy írt meg, hogy nem kezeli le a hibákat, és mi nem módosíthatjuk a szignatúráját, akkor kivételek kiváltásával oldhatjuk meg a problémát. – Lásd except_alk4b.cpp ! ● Az is hasznos lehet, ha felhasználjuk a visszatérési értéket és a kivételeket egyaránt. Pl. kis hiba – return; nagy hiba – kivétel – Lásd except_alk4c.cpp ! ● Ne felejtsük el, hogy a kivételkezelést is tesztelni kell, ehhez szimulálhatjuk a hibás eseteket!

10 A C++ programozási nyelvSoós Sándor 10/15 Kivételek használata speciális esetekre ● Nem csak hibák kezelésére használhatjuk a kivételeket. ● Bizonyos eseteket kezelhetünk kivételként. – Lásd except_alk5.cpp ! ● A kivételben tetszőleges információkat is átadhatunk, akár többféle adatot is. – Lásd except_alk6.cpp !

11 A C++ programozási nyelvSoós Sándor 11/15 Csomagoló, wrapper függvények ● Egy külső függvényt becsomagolhatunk úgy, hogy módosítjuk a függvény hibakezelését. A függvény hibajelzéseit átalakíthatjuk – visszaadott hibakódokra ● Lásd except_alk7a.cpp ! – kivételekre ● Lásd except_alk7b.cpp !

12 A C++ programozási nyelvSoós Sándor 12/15 Konstruktorok fajtái, értékadó operátor ● Default konstruktor ● Paraméteres konstruktor ● Másoló konstruktor – Valami( Valami& Masik ); ● Értékadó operátor – Valami& operator=( Valami& Masik );

13 A C++ programozási nyelvSoós Sándor 13/15 A this pointer ● Minden osztály minden metódusa kap egy láthatatlan paramétert, ami az éppen aktuális példányra mutató pointer, a neve "this". ● Ritkán használjuk, mert a this elhagyásával is hozzáférhetünk az aktuális objektum tagjaihoz. ● Néha azonban szükség van rá, például névazonosság esetén class Valami { public: int X; Valami( int X ) { this->X = X; } } Ebben az esetben persze elkerülhető a this használata, ha átnevezzük az egyik X -et.

14 A C++ programozási nyelvSoós Sándor 14/15 Mikor hívódnak meg? ● Mikor hívódnak meg az egyes konstruktorok illetve az operator= ? int main() { Valami v1; Valami v2(v1); Valami* vp = new Valami(v1); v2 = v1; Valami v3 = v1; } ● Lásd konstr1.cpp !

15 A C++ programozási nyelvSoós Sándor 15/15 Automatikusan létrehozott konstruktorok, ill. operator= ● Mikor elégedhetünk meg az automatikusan generált változatokkal? ● Mikor kell sajátot írnunk? ● Hogyan tilthatjuk meg a generálást? Miért? ● Mi történik egy tagobjektummal, ha kifelejtjük a másoló konstruktorból?


Letölteni ppt "A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat - 12. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet."

Hasonló előadás


Google Hirdetések