Salve a tutti, volevo chiedere una dritta su un comportamento che non mi torna. Ho creato una classe, a scopo puramente didattico, per la gestione
di un'eccezione, il problema è che quando vado a stampare a video non riesco a leggere correttamente il testo. Ho provato a cambiare il tipo
ritornato dalla what() da const char* a string rimuovendo il metodo c_str() ed effettivamente riesco a leggere correttamente il testo, ma usando questo codice non riesco ad ottenere lo stesso risultato. Grazie in anticipo.
////////////////////////////////////////////////////////////////////////////////////////////////////
file DivisionePerZero.h
#ifndef INCLUDED_DIVISIONEPERZERO_H
#define INCLUDED_DIVISIONEPERZERO_H
#include<string>
class DivisionePerZero : public std::invalid_argument
{
public:
DivisionePerZero(const char* _messaggio) : invalid_argument{ _messaggio }
{}
DivisionePerZero(std::string _messaggio) : invalid_argument{ _messaggio }
{}
virtual ~DivisionePerZero()
{}
virtual const char* what()
{
return ("Eccezione definita da me: " + std::string(invalid_argument::what())).c_str();
}
};
#endif INCLUDED_DIVISIONEPERZERO_H
//////////////////////////////////////////////////////////////////////////////////////////////////
file Origine.cpp
#include<iostream>
#include"DivisionePerZero.h"
double calcolo(double a, double b)
{
if (b == 0) throw DivisionePerZero{ "Hai diviso per zero!!!" };
return a / b;
}
int main()
{
double n = 0;
try
{
n = calcolo(2.0, 0.0);
}
catch (DivisionePerZero mia_eccezione)
{
std::cout << mia_eccezione.what() << std::endl;
}
std::cout << n << std::endl;
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
testo visualizzato:
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
0