[ cbb @ 07.05.2009. 02:47 ] @
Rečeno mi je da bi kod exception handling-a trebalo da za throw stavljam objekat posebne klase grešaka ("throw Izuzetak();"), umesto npr. "throw 20;".
Nisam uspeo da shvatim koja je prednost toga. :)
[ Goran Arandjelovic @ 07.05.2009. 03:11 ] @
Ako ti je neophodno malo više informacija u vezi nepredviđene situacije, bacićeš složeniji objekat koji ih objedinjuje.

Nema tu pravila, ako ti je dovoljno da baciš jedan ceo broj samo, onda je i to sasvim ok.
Doduše, praksa je da imaš određenu hijerarhiju klasa izuzetaka i da bacaš objekat neke od tih klasa kako bi lepo mogao da iskoristiš eventualno polimorfno ponašanje i da postigneš veću granularnost.

Ako nije baš jasno opet, daću ti primer...
[ Mihajlo Cvetanović @ 07.05.2009. 09:47 ] @
Citat:
cbb: Nisam uspeo da shvatim koja je prednost toga. :)

Recimo da ti se situacija sa izuzecima zakomplikuje, pa ti trebaju dodatne informacije za neki izuzetak. Treba ti recimo koja je funkcija pozvana i sa kojim parametrima. To ćeš lako pribeležiti ako je izuzetak objekat.
[ cbb @ 07.05.2009. 12:58 ] @
Ok, da, kapiram. Iz istog razloga iz kog je osoba tipa klasa, a ne ceo broj. Greška može biti složeno opisana.
Hvala. Problem je bio u tome što je meni dato neko polovično objašnjenje o tome kako ne želimo svaki put kad bacamo izuzetak "pisati "nešto" ".
[ Mihajlo Cvetanović @ 07.05.2009. 13:35 ] @
Ni meni to objašnjenje ne govori mnogo, ali možda se odnosi na to da si u slučaju sa celobrojnim izuzetkom obavezan da interpretiraš taj broj svuda gde hvataš izuzetak. U slučaju sa klasama obično se interpretacija implementira u samoj klasi, kao što std::exception ima članicu char* what().