gpt4 book ai didi

c++ - 继承类中没有构造函数时如何抛出异常?

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:09 24 4
gpt4 key购买 nike

我不确定这个问题是否合适,但我会尽力而为。

这是我的作业题。作业要求我在两条线平行或相等时抛出异常。

原始代码由我的教授提供,我的工作是修改它以使其能够抛出异常。

行.h

class RuntimeException{
private:
string errorMsg;
public:
RuntimeException(const string& err) { errorMsg = err; }
string getMessage() const { return errorMsg; }
};

class EqualLines: public RuntimeException{
public:
//empty
};

class ParallelLines: public RuntimeException{
public:
//empty
};

class Line{
public:
Line(double slope, double y_intercept): a(slope), b(y_intercept) {};
double intersect(const Line L) const throw(ParallelLines,
EqualLines);
//...getter and setter
private:
double a;
double b;
};

教授告诉我们不要修改头文件,只能修改.cpp文件。

行.cpp

double Line::intersect(const Line L) const throw(ParallelLines,
EqualLines){
//below is my own code
if ((getSlope() == L.getSlope()) && (getIntercept() != L.getIntercept())) {
//then it is parallel, throw an exception
}
else if ((getSlope() == L.getSlope()) && (getIntercept() == L.getIntercept())) {
//then it is equal, throw an exception
}
else {
//return x coordinate of that point
return ((L.getIntercept()-getIntercept()) / (getSlope()-L.getSlope()));
}
//above is my own code
}

因为这两个继承类是空的,因此没有构造函数来初始化 errorMsg ,我也不能创建这些类的对象来抛出异常。任何替代解决方案来实现这一目标?

最佳答案

因为你有一个异常说明符,你可能只会抛出 EqualLinesParallelLines。这些异常类型没有默认构造函数(它们的基类型没有默认构造函数)并且没有其他构造函数。构造这些异常中的任何一个的唯一方法是复制一个现有的异常。在不修改 header 或违反标准的情况下,不可能抛出这些异常中的任何一个。我会咨询教授,这对我来说是个错误。

一般来说,异常说明符不是一个好主意。 See this answer .它们实际上已被弃用。

关于c++ - 继承类中没有构造函数时如何抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41683674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com