как вызвать исключение, если в унаследованном классе нет конструктора?

Я не уверен, что вопрос уместен, но я буду стараться изо всех сил.

Это моя домашняя проблема.
Домашнее задание просит меня сгенерировать исключение, если две линии параллельны или равны.

Оригинальные коды предоставлены моим профессором, и моя работа состоит в том, чтобы изменить его, чтобы он мог выдать исключение.

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 Кроме того, я не могу создать объект этих классов, чтобы вызвать исключение. Любое альтернативное решение для достижения этой цели?

0

Решение

Поскольку у вас есть спецификатор исключения, вы можете EqualLines или же ParallelLines, Эти типы исключений не имеют конструктора по умолчанию (их базовый тип не имеет конструктора по умолчанию) и не имеют других конструкторов. Единственный способ создать любое из этих исключений — скопировать существующее. Невозможно выбросить ни одно из этих исключений без изменения заголовков или нарушения стандарта. Я бы посоветовался с профессором, мне это кажется ошибкой.

В общем, спецификаторы исключений — плохая идея. Смотрите этот ответ. Они фактически устарели.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector