#include <iostream>
#include <string>
using namespace std;
class A
{
public:
A()
{
cout << "this = " << this << "\tA constructor called" << endl << endl;
}
A(const A &a)
{
this->m_str = a.m_str;
cout << "this = " << this << "\tA copy constructor called" << endl << endl;
}
~A()
{
cout << "this = " << this << "\t~A destructor called" << endl << endl;
}
void showMessage()
{
cout << m_str << endl;
}
string m_str;
};
int divideInt(int x, int y)
{
if (y == 0)
{
throw(-1);
}
return x / y;
}
double divideDouble(double x, double y)
{
if (y == 0)
{
throw(-1.0);
}
return x / y;
}
int divide(int x, int y)
{
if (y == 0)
{
A a;
a.m_str = " exception: y == 0";
throw(a);
}
return x / y;
}
int main()
{
try
{
divide(4, 0); // 抛对象
divideInt(4, 0); // 抛int
divideDouble(4.3, 0); // 抛double
cout << "hello world" << endl;
}
catch (int e)
{
cout << " got a int exception:" << e << endl;
}
catch (double e)
{
cout << "got a double exception:" << e << endl;
}
catch (A &e)
{
e.showMessage();
}
catch (...)
{
cout << "other exception" << endl;
}
return 0;
}