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