我不确定这个问题是否合适,但我会尽我所能.
这是我的作业问题.如果两条线平行或相等,则作业要求我抛出异常.
原始代码由我的教授提供,我的工作是修改它以使其能够抛出异常.
line.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文件.
line.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
,也没有我可以创建这些类的对象来抛出异常.实现这个的任何替代解决方案?
因为你有一个异常说明符,你只能抛出EqualLines
或ParallelLines
.这些异常类型没有默认构造函数(它们的基类型没有默认构造函数)并且没有其他构造函数.构造这些异常中任何一个的唯一方法是复制现有异常.如果不修改标题或违反标准,就不可能抛出这些异常中的任何一个.我会咨询教授,这对我来说似乎是个错误.
通常,异常说明符是个坏主意.看到这个答案.它们实际上已被弃用.