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. C++ programozási nyelv Gyakorlat - 12. hét. Tartalomjegyzék. Kivételek használata Paraméterátadás - Visszajelzés A külvilággal való kapcsolat Saját programhiba jelzése

lucius
Download Presentation

C++ programozási nyelv Gyakorlat - 12. hét

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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. 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. 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 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. Saját programhiba jelzése int main() { try{ f(3); } catch(ProgramHiba& p){ printf("Programhiba %d\n",p.Kod); } catch(...){ printf("Egyeb kivetel\n"); } return 0; } // 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; } } Felkészülünk a hibás paraméter értékekre

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

More Related