[ Free_Sex @ 29.08.2004. 14:18 ] @
Uradio sam (skoro) ceo domaci kod Lasla. Ali me muce exceptioni. Recimo imam klasu koja predstavlja boju (r,g,b vrednosti). I potrebno je da ako se upise broj <0 ili > 255 za neku od vrednosti da ispisem gresku (ali ne tipa if(greska) cout <<...).

On to trazi da se resi pomocu klasa specijaln oprojektovanih za to.
Dakle da napravim jos jednu klasu, recimo G_boja_pogresna, koja treba da mi handluje exception.

Ali sve u svemu to ne radi.

Pokusao sam sa onom njegovom standardnom Greska klasom, koju posle nasledjujes ali VSC++ se ne zali, ali pukne program kada dodje do toga da treba da handluje exception.

Mozda neko "standardnije" resenje koje ce da koristi exception zaglavnje (klasu).

Treba mi samo da ispise gresku, nista vise.

A opet ne mogu da stavim ceo main u try i na kraju samo catch i da ispisem ... ali ako nista drugo ne uspem, uradicu tako.

[ filmil @ 29.08.2004. 14:31 ] @
Postavi program ovde. Inače ti niko ne može pomoći.

f
[ Free_Sex @ 29.08.2004. 14:39 ] @
Ma ceo program je komplikacija ziva. Ima dakle sledece klase :
tacka, boja, figura, krug, trougao, cetvorougao, mnogougao ...etc crtez, galerija.
Gde su ocigledno trougao i ostali izvedeni iz figure itd.

Ja cu evo dati kod samo za klasu boja :
Code:


// ovde treba napraviti jos jednu klasu koja ce da nehluje exception
class G_neispravna_boja {

}

class Boja {
    int r,g,b; // red green blue
    void postavi(int rr, int gg, int bb){
        Boja pom(rr,gg,bb);
        // ovo unosim prvo u pomocnu
        // da bi ga konstruktor proverio
        // i sad ako je ok onda samo upisati u pravu
        r= pom.r;
        g= pom.g;
        b= pom.b;
    }
public:

    Boja(int rr=0, int gg=0, int bb=0){
        
            if(rr < 0 || rr > 255 || gg < 0 || gg > 255 || bb < 0 || bb >255){
                // greska
                //cout<<"Uneseni podaci nisu u dozvoljenom opsegu!";
                throw G_neispravna_boja();
// e dakle ovde se poziva exception
            }
        
        // Ovde treba proveriti boju dali je u opsegu
        r=rr;
        g=gg;
        b=bb;
    }

    void postavi_r(int rr){
        postavi(rr,g,b);
    }

    void postavi_g(int gg){
        postavi(r,gg,b);
    }

    void postavi_b(int bb){
        postavi(r,g,bb);
    }

    void unesi(){
        int rr,gg,bb;
        cout<<"Unesi boju (r,g,b): ";
        cin>>rr>>gg>>bb;
        postavi(rr,gg,bb);
    }

    void pisi(){
        cout<<"boja: ["<<r<<","<<g<<","<<b<<"]\n";
    }
};


#endif


Ako neko ima neki primer toga. Na netu gde kod sam nesot nasao, to je po sistemu
main() {
try {
//do your work
} catch (...){

}

[ Free_Sex @ 29.08.2004. 14:49 ] @
Pa ne znam ... kod Lasla je to zesce objasnjeno. Odmah sa nekim nasledjivanjima i namespaceovima. Tako da na kraju nista nisam skapirao ...
[ Djuki @ 29.08.2004. 22:12 ] @
Ja sam radio domaci kod Lasla i ovako sam resio Izuzetke:
Code:

// Greska.h
enum TipGreske {
   PRVA,
   DRUGA
};

class Greska {
    TipGreske tip;
public:
    Greska(TipGreske t=NEPOZNATO);
    void obradiGresku();
};

//Greska .cpp
#include "greska.h"

Greska::Greska (TipGreske t) {
    tip = t;
}

void Greska::obradiGresku() {
    if (tip != NEPOZNATO)
    {
        switch (tip)
        {
        case PRVA: {
            cout<<"\n*** Prekoracenje! Boja mora biti u opsegu od 0 d0 255. ***\n";
            break;
                   }
        case DRUGA: {
            cout<<"\n*** Niz mora imati duzinu vecu od nule ***\n";
            break;
                  }
        default: exit(2);
        }
    } else exit(1);
}



Uradi ovako i nemas frke ;) mada se ovo meze izvesti na bezbrij nacina. Pozdrav
[ Djuki @ 29.08.2004. 22:18 ] @
I da zaboravio sam kada zelis da prijavis izuzetak uradis sledece:
Code:

if (nestoNijeURedu) 
    throw Greska (PRVA);



a naravno u glavnom progamu koji koristi ove klase mora da bude try-catch blok.
Code:

void main () {
  try {
    // program 
   } catch (Greska g)
   {
      g.ObradiGresku();
   }
}