所以我有一个实现分数的类。我必须添加catch&抛出到构造函数(如果分母为零(和除法的重载运算符(如果除以零(。我该如何认识到这一点?但我需要catch块覆盖这个构造函数,因为我需要停止创建这个对象。
class Rational{
public:
Rational(const int num, const int den){
try{
numerator = num;
denominator = den;
if( denominator == 0){
throw invalid_argument(" den is zero ")
}
}
catch (invalid_argument& e){
cout << e.what() << endl;
}
}
// I mean I want smth like that
try {
Rational operator/(const Rational& lhs, const Rational& rhs) {
return Rational{ lhs.Numerator() * rhs.Denominator(), lhs.Denominator() * rhs.Numerator() };
if (rhs.Numerator() == 0) {
throw domain_error("dividing by zero");
}
}
}
catch (const domain_error& e) {
cout << e.what();
}
不要在构造函数中放入try
/catch
。如果在构造函数中catch
异常,则将创建对象。
如果denominator
无效,则Rational
对象将无效,不应创建。try
/catch
应该位于尝试创建Rational
对象的代码周围。
如果您的Rational
对象是用new
分配的,那么系统将自动解除分配给Rational
的内存,然后为您重新抛出catch
的异常。
我不确定我是否理解你的问题。防止类被构造的唯一方法是抛出异常,而不是捕获它。
您可以简单地将异常抛出try/catch块之外。