Eccezioni

di il
4 risposte

Eccezioni

Probabilmente non ho capito qualcosa circa le eccezioni standard. Lanciando il programma seguente:


#include <iostream>
#include <exception>

using namespace std;

int main(int argc, char* argv[]) {

	int x;
	int y = 6;
	int z;

	cout << "Inserisci il divisore" << endl;

	cin >> x;

	try {
		z = y/x;
	} catch(exception e) {
		cout << "Eccezione generica" << endl;
	}

	return 0;
}

e digitando 0 da tastiera per valorizzare la variabile x, mi aspettavo di catturare l'eccezione e quindi che venisse stampato il messaggio "Eccezione generica". Invece su terminale è stampato il messaggio "Errore di virgola mobile". Uso Linux.
Qualcuno ha qualche suggerimento?

Grazie

4 Risposte

  • Re: Eccezioni

    La divisione per zero non è una eccezione standard in C++ e non viene trappata. Devi testare il divisore ed, eventualmente, generare tu una eccezione.
  • Re: Eccezioni

    oregon ha scritto:


    La divisione per zero non è una eccezione standard in C++ e non viene trappata. Devi testare il divisore ed, eventualmente, generare tu una eccezione.
    Ah non lo sapevo, davo per scontato che lo fosse. Quindi il codice è giusto per la cattura di eccezioni standard?
  • Re: Eccezioni

    Ni. L'eccezione va catturata per reference altrimenti perdi il polimorfismo (exception è una classe base).
    
    } catch(exception& e) {
    
  • Re: Eccezioni

    shodan ha scritto:


    Ni. L'eccezione va catturata per reference altrimenti perdi il polimorfismo (exception è una classe base).
    
    } catch(exception& e) {
    
    Ah sì giusto hai ragione!
Devi accedere o registrarti per scrivere nel forum
4 risposte