当前位置:  开发笔记 > 编程语言 > 正文

如果继承类中没有构造函数,如何抛出异常?

如何解决《如果继承类中没有构造函数,如何抛出异常?》经验,为你挑选了1个好方法。

我不确定这个问题是否合适,但我会尽我所能.

这是我的作业问题.如果两条线平行或相等,则作业要求我抛出异常.

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

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,也没有我可以创建这些类的对象来抛出异常.实现这个的任何替代解决方案?



1> François And..:

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

通常,异常说明符是个坏主意.看到这个答案.它们实际上已被弃用.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有