初始化对象时抛出错误

时间:2017-06-12 21:59:53

标签: c++ object

让我们说,在初始化宠物类时,我想排除或禁止狗或猫作为物种。抛出invalid_argument异常的正确方法是什么?

RewriteRule ^test/myscript\.php$ - [L]

2 个答案:

答案 0 :(得分:2)

如果您考虑到一组特定的物种,我会这样做的方法是使用物种的枚举:

enum class Species {
  horse,
  lizard,
  human
};

然后制作类Species类的物种。这会将传递给构造函数的内容限制为"已批准"物种(即你在enum中包含的物种)。只有在您拥有有限(且详尽无遗)的物种清单时,这才有效。

如果您希望物种不详尽,您可能希望拥有Species基类并制作具体的物种子类。然后,您可以使用模板限制特定类型,这将是编译错误而不是异常 - 更为可取!

如果您不喜欢这些选项中的任何一个,那么您可以采用最严格且容易出错的方式,即只检查构造函数体中的字符串相等性,并抛出您得到猫的情况,狗,或任何其他不受欢迎的物种。

答案 1 :(得分:1)

Pet(const string & the_name, const string & the_species):      name(the_name), species(the_species), age(0)
  {
  if (species == "cats" || species == "dogs")
    throw std::invalid_argument( "received negative value" );
  }