Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rzucanie wyjątków

Ostatnio zmodyfikowano 2015-03-25 21:27
Autor Wiadomość
dek12
Temat założony przez niniejszego użytkownika
Rzucanie wyjątków
» 2015-03-24 11:44:25
Cześć mam pytanie, jak lepiej obługiwać wyjątki.

tak:
C/C++
class SuperWyjatek { };

...

double DziwnaFunkcja( int a )
{
    if( a == 666 )
         throw SuperWyjatek();
   
    return a;
}

...

int main()
{
    try {
        DziwnaFunkcja( 666 )
    }
    catch( SuperWyjatek )
    {
        cerr << "SUPER WYJATEK";
    }
   
    return 0;
}
czy może tak:
C/C++
class SuperWyjatek {
public: SuperWyjatek() { cerr << "SUPER WYJATEK"; }
};

...

double DziwnaFunkcja( int a )
{
    if( a == 666 )
         throw SuperWyjatek();
   
    return a;
}

...

int main()
{
    try {
        DziwnaFunkcja( 666 )
    }
    catch( SuperWyjatek )
    {
    }
   
    return 0;
}
P-129024
maly
» 2015-03-24 12:17:45
P-129025
dek12
Temat założony przez niniejszego użytkownika
» 2015-03-24 15:36:41
Czyli lepiej utworzyć sobie jedną klasę np Wyjątki w niej trzymać metody, dla poszczególnych wyjątków i w zależności od wyjątku w catch wywoływać odpowiednią metodę?
P-129042
Monika90
» 2015-03-24 15:58:00
Jeżeli tobie chodzi o to, czy to dobry pomysł żeby konstruktor wyjątku drukował komunikat o błędzie, to nie, to nie jest dobry pomysł.
P-129044
dek12
Temat założony przez niniejszego użytkownika
» 2015-03-24 16:03:15
Pani Moniko, a może Pani coś więcej napisać o tym?
P-129045
Monika90
» 2015-03-24 16:23:36
Rolą wyjątków jest przeniesienie informacji o tym że błąd wystąpił (i jaki to był błąd) z jednego miejsca w programie do drugiego. To znaczy, z miejsca w którym błąd został wykryty do miejsca które wie jak na ten błąd zareagować. Jeżeli umieścisz drukowanie komunikatu w konstruktorze klasy wyjątku, to ten komunikat będzie drukowany zawsze, nawet wtedy kiedy nie będzie to właściwą reakcją na dany błąd (bo na przykład właściwą reakcją będzie wyświetlenie messageboksa).
P-129049
dek12
Temat założony przez niniejszego użytkownika
» 2015-03-24 20:00:39
Dziękuje,
to czy dobrym rozwiązaniem jest stworzenie swojej klasy, która będzie przechowywała różne wyjątki, np:
C/C++
myExc {
    string ZwrociJakisStringZInfo() {...}
    int ZwrociJakisInt() {...}
};

Potem,gdzieś robimy
C/C++
throw myExc()
i tam gdzie potrzebujemy jednej z info z klasy
C/C++
catch( myExc e )
{
    cout << e.ZwrociJakisStringZInfo()
}

dobrze to rozumiem?
P-129081
Brunon3
» 2015-03-24 20:03:06
Jeżeli ja dobrze rozumiem, to Ty źle rozumiesz.

-BD.
P-129082
« 1 » 2
  Strona 1 z 2 Następna strona