【发布时间】:2017-11-07 23:01:39
【问题描述】:
所以,我想限制在构造函数中使用 try-throw-catch 来创建没有参数的对象。这是我到目前为止所写的。但它不能正常工作,我该怎么办?没有错误,只返回 0。
#include <iostream>
using namespace std;
class Person
{
public:
Person(int _age)
{
age = _age;
try
{
if (age == -1)
{
throw 1;
}
}
catch (int x)
{
cout << "You have to specify person's age" << endl;
}
}
private:
int age = -1;
};
int main(void)
{
Person a();
return 0;
}
【问题讨论】:
-
Person a();是一个不带参数并返回Person的函数的声明。它不是Person类型变量的定义。你可以写Person a;或Person a{};- 因为Person没有默认构造函数,所以它们不会编译。 -
正确的做法是在
main函数中使用 try-catch 来创建Person实例。这样,即使年龄无效,也会创建Person实例,问题是,是否应该允许Person对象的年龄无效? -
另外,即使你说
Person a;,也不会编译,因为默认构造函数不会被合成,因为你提供了一个非默认构造函数。 -
如果您不想在没有参数的情况下调用该函数,请不要创建默认构造函数。
-
您的代码允许创建一个年龄为 -5 的人。您可能需要将
age视为 无符号 整数,因为负年龄没有意义。