Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    146

    [C++] ECCEZIONI primi esercizi

    Buonasera, come dice l'oggetto sto facendo i primi esercizi con l'eccezioni in C++.
    Finora le ho studiate in Java ma se sto capendo bene quello che ho studiato in C++ mi deludono un pò

    Ad esempio:
    codice:
    int dividendo=0,divisore=0;
    	cout << "Inserisci due interi : ";
    	cin >> dividendo >> divisore;
    	try
    	{
    		if (divisore==0)
    			throw "Errore: divisore = 0";
    		cout << "Risultato divisione : "<< dividendo/divisore<<endl;
    			
    	}
    	catch(...)
    	{
    	cout << "Errore" << endl;
    	}
    Funziona però devo per forza lanciarla io l'eccezione altrimenti non entra nel blocco catch ma da un messaggio "Errore di virgola mobile".
    Non è possibile che catch(...) la intercetti senza throw e me la faccia analizzare con qualche oggetto eccezione tipo exception ?
    Anche usando il throw, il mio dubbio è : come ispeziono il tipo di eccezione nel blocco catch(...) ?

    Grazie in anticipo per ogni eventuale consiglio...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Al contrario di linguaggi come Java o Ada, in C++ non gestire la divisione per zero con una eccezione è stata una precisa scelta di design del linguaggio per una questione di efficienza.

    Ha scritto Stroustrup :

    "low-level events, such as arithmetic overflows and divide by zero, are assumed to be handled by a dedicated lower-level mechanism rather than by exceptions. This enables C++ to match the behaviour of other languages when it comes to arithmetic. It also avoids the problems that occur on heavily pipelined architectures where events such as divide by zero are asynchronous."

    Per la catch

    http://msdn.microsoft.com/en-us/library/6dekhbbc.aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    146
    Grazie per la risposta....molto utile
    venendo da Java sto cercando di orientarmi ancora, cmq è stata utile per orientarmi.
    la divisione per zero l'avevo scelta tanto per fare un esempio ma ho scelto il caso sbagliato...

    Grazie ancora....

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    Re: [C++] ECCEZIONI primi esercizi

    Originariamente inviato da tiro1997
    Buonasera, come dice l'oggetto sto facendo i primi esercizi con l'eccezioni in C++.
    Finora le ho studiate in Java ma se sto capendo bene quello che ho studiato in C++ mi deludono un pò
    Il problema di java è che per ogni cosa ti devi andare a studiare mille classi o interfacce.


    Anche usando il throw, il mio dubbio è : come ispeziono il tipo di eccezione nel blocco catch(...) ? [/B]
    Grazie in anticipo per ogni eventuale consiglio...
    E' possibile.Tu stampi proprio l' eccezione lanciata, ti faccio un esempio:

    codice:
        try
        {
            if(k==0)
                throw " 0 non va bene";
            else if(k==1)
                throw "1 non va bene";
        }
        catch(char*s)
        {
            cerr << "Eccezione: " << s <<endl;
        }
    I singoli messaggi di eccezioni ti consiglio di memorizzarteli come variadili globali (con const char[] ) o definite con #define.

  5. #5

    Re: Re: [C++] ECCEZIONI primi esercizi

    Originariamente inviato da ramy89
    I singoli messaggi di eccezioni ti consiglio di memorizzarteli come variadili globali (con const char[] ) o definite con #define.
    Più che altro conviene usare classi derivate da std::exception piuttosto che altri tipi per le eccezioni, altrimenti è un marasma...
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Una volta che derivo la classe da std::exception o da boost::exception, come se faccio se voglio decidere io che messaggio stampare? Puoi fare un esempio?

    edit:
    Mi spiego meglio, a me stampa sempre messaggi che non sono significativi, mi dice ad esempio :
    codice:
    Terminate called after throwing an instance of' excp1*'
    Aborted
    Ma io vorrei che mi stampasse un messaggio più significativo, ad esempio ho provato così:

    codice:
    #include <iostream>
    #include <exception>
    
    using namespace std;
    
    class excp1:exception
    {
        public:
        virtual const char* what() const throw()
        {
            return "Bad ass exception";
        }
    };
    
    
    int main(int argc, char **argv)
    {
        try
        {
            if(1!=0)
                throw new excp1();
        }
        catch(excp1& e)
        {
            cerr<<e.what();
        }
        return 0;
    }
    Ma non mi stampa mai il messaggio "Bad ass exception".

  7. #7
    Tu hai sollevato un'eccezione di tipo excp1 *, mentre il blocco catch si aspetta una excp1 (senza puntatore). In generale, con le eccezioni non si usa mai new, avresti dovuto scrivere:
    codice:
    throw excp1();
    ottenendo il risultato cercato (link).
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.