Témakör: Kivételkezelés


12.3 .  Mátrix operátorai kivételekkel

Webmester felhasználó Írjunk n*m-as mátrixokat egységbezáró osztályt!
- A mátrix egyes elemei valós számok.
- Írjon konstruktort, ami paraméterként a mátrix méreteit kapja meg.
- Az elemhozzáférést megvalósító () operátor implementációjában helytelen indexek esetén dobjunk kivételt (keressük meg a megfelelő STL kivételosztályt)
- A mátrixhoz lehessen hozzáadni, belőle kivonni más n*m-as mátrixokat, valamint más mátrixszal is össze lehessen szorozni, amennyiben a dimenziók nem megfelelőek a dobjunk kivételt. Lehessen ellenőrizni, hogy a mátrix invertálható-e, ha nem (a determinánsa 0), akkor dobjunk kivételt. 
- Az elegáns kivételkezeléshez készítsünk saját kivételosztályt a mátrixok esetén előforduló kivételekhez (ős, dimenzióhiba, determináns 0).
- A program tagolása (.h: osztálydeklaráció, .cpp: hosszabb implementációjú függvények törzse) a C++ programozók körében elterjedt konvenciók alapján történjen, és védjük le a többszörös beépítésből eredő újradefinicióról szóló hibaüzeneteket. A tesztelő függvény is külön állományba kerüljön.
- Írjunk egy egyszerű main függvényt, ami bemutatja a mátrix osztály felhasználását, és a kivételek lekezelését!


2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


12.4 . megoldással  MathException kivétel készítése

Webmester felhasználó Készítsünk egy matematikai kivételek kezelésére szolgáló saját osztályt!
- Ügyeljünk arra, hogy az osztály az exception ősosztályból származzon!
- Tartalmazzon az osztály egy int típusú tagváltozót, mely a hiba kódját tartalmazza!
- Írjuk felül a what() függvényt, mely szövegesen leírja az adott hibát!
- Teszteljük le az elkészített kivételkezelő osztályunkat!


2008.02.02. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


12.6 . megoldással  Saját kivétel állománykezelő keretrendszerhez

Webmester felhasználó

Keretrendszert készítünk, amely az operációs rendszertől függő állománykezelést zárja egységbe. Többek között lehetőséget ad arra, hogy átnevezzünk egy állományt. A hibákat kivételekkel jelzi. A kivételeknek van egy szöveges hibaüzenete, és szeretnénk egy hibakódot is megadni, valamint az üzenethez hozzáfűzni, hogy a keretrendszer felhasználó programozó az operációs rendszer dokumentációjában utána tudjon nézni a hibaüzenetnek. A File osztály leegyszerűsített vázlata az alábbi:

class File

{

      public:

            static void rename(string oldName, string newName)

            {

                  if (::rename(oldName.c_str(), newName.c_str()))

                  {

                        throw file_error("Error renaming " + oldName + " to " + newName, errno);

                  }

            }

};

 

Írjuk meg a file_error kivételosztályt, és írjunk hozzá egy egyszerű main függvényt, ami bemutatja a a felhasználását!



2008.01.31. |  Permalink  |  Hozzászólások: 1  |  Tárgyszavak: példa szintje


12.7 . megoldással  Kivételkezelési hibák

Webmester felhasználó

Döntsük el, van-e futási idejű hiba az alábbi programrészletekben!


Ezeket a példákat tanulmányozzuk a számonkérésre való felkészülés közben.
 

a)

char* str= new char[10];

if(isError()) //Ez a sor OK.

      throw logic_error("Baj van");

delete[] str;

 

b)

int a;

... // az a változó értékét módosítjuk

int* ptr = new int (32);

if(a==0) throw logic_error("a==0");

 

c)

class exception{...};

class logic_error: public exception{...};

 

try

{

      ...

}

catch(const exception& e){...}

catch(const logic_error& e){...}

 

d)

try

{

      ...

      throw new logic_error("Problem.");

}

catch(const logic_error* pe){...}

{

      cerr << pe->what() << endl;

}

 



2008.01.21. |  Permalink  |  Hozzászólások: 2  |  Tárgyszavak: példa szintje