Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试创建一个对象_C++ - Fatal编程技术网

C++ 尝试创建一个对象

C++ 尝试创建一个对象,c++,C++,因此,对于我正在学习的一个类,我们正在练习重载运算符,但更具体地说,我们正在为分数(有理数)设计一个类。我在玩try-catch块,似乎无法让它像我想要的那样工作,也找不到任何论坛或文章来说明我不明白的地方。我试图在try-catch块中创建rational number对象,以确保输入分母的值不是“0”,如果是,我让catch块调用对象的解构器。我的这一点工作得很好,但似乎我没有办法在代码的后面使用try-catch块中创建的对象,即使构造函数成功地为分母分配了一个非零值。有没有办法在try-

因此,对于我正在学习的一个类,我们正在练习重载运算符,但更具体地说,我们正在为分数(有理数)设计一个类。我在玩try-catch块,似乎无法让它像我想要的那样工作,也找不到任何论坛或文章来说明我不明白的地方。我试图在try-catch块中创建rational number对象,以确保输入分母的值不是“0”,如果是,我让catch块调用对象的解构器。我的这一点工作得很好,但似乎我没有办法在代码的后面使用try-catch块中创建的对象,即使构造函数成功地为分母分配了一个非零值。有没有办法在try-catch块中声明一个对象,以验证它在创建时不会抛出异常,但仍在try-catch块之外但仍在同一函数中的其余代码的作用域内,或者没有办法实现它?

try
引入了一个新的作用域。您无法在
try
之外使用成功构建的对象,因为它们已超出范围并已被销毁。这适用于在任何块中创建的对象,例如
for
if
,或任何一组
{}
大括号。您要做的是将依赖于对象的代码移动到
try

例如:

try {
  Rat rat1(3, 1);
  Rat rat2(2, 4);
  Rat rat3 = rat1 + rat2;
  std::cout << rat3 << std::endl;
}
catch (std::exception& e) {
  // above should not throw
}

try {
  Rat rat1(3, 1);
  Rat rat2(2, 0);  // throws
  Rat rat3 = rat1 + rat2;
  std::cout << rat3 << std::endl;
}
catch (std::exception& e) {
  // code here will execute
}
试试看{
大鼠rat1(3,1);
大鼠rat2(2,4);
大鼠rat3=rat1+rat2;

std::cout一般来说,最好发布您已经尝试过并且遇到困难的代码。您不需要在catch子句中显式调用任何本地对象的析构函数。当对象出于任何原因超出范围时,包括抛出异常时,会自动调用析构函数。这就是为什么可以工作的原因。