Я не уверен, что вопрос уместен, но я постараюсь изо всех сил.как выбросить исключение, если в унаследованном классе нет конструктора?
Это моя домашняя проблема. Домашнее задание попросит меня сделать исключение, если две строки параллельны или равны.
Исходные коды предоставлены моим профессором, и моя задача - изменить его, чтобы он смог исключить исключение.
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
, ни я могу создать объект этих классов бросить исключение. Любое альтернативное решение для этого?
Введенный вами код использует старые спецификации «throw». Подумайте о том, чтобы отбросить их и использовать новый и современный спецификатор noexcept, если функция ничего не выбрасывает, и ничего другого. В вашем случае, пожалуйста, сообщите профессору, чтобы он больше не использовал эту старую технику – Rakete1111
* Профессор сказал нам НЕ изменять файл заголовка, только файл .cpp может быть изменен. * - Ваш профессор должен знать, что определенные пользователем исключения должны быть выведенным из 'std :: exception', то есть' class RuntimeException: public std :: exception {...}; ' – PaulMcKenzie
@PaulMcKenzie. Почему они должны выводиться из' std :: exception'? – 0x499602D2