Je ne suis pas sûr que la question soit appropriée mais je ferai de mon mieux.comment lancer une exception quand il n'y a pas de constructeur dans la classe héritée?
Ceci est mon problème de devoirs. Les devoirs me demandent de lancer une exception si deux lignes sont parallèles ou égales.
Les codes d'origine sont fournis par mon professeur et mon travail est de le modifier pour le rendre capable de lancer une exception.
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;
};
Professeur nous a dit de ne pas modifier le fichier d'en-tête, seul le fichier .cpp peut être modifed.
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
}
puisque ces deux classes héritées sont vides donc pas de constructeur pour initialiser le errorMsg
, ni je peux créer un objet de ces classes à jeter exception. Toute autre solution pour y parvenir? Parce que vous avez un spécificateur d'exception, vous ne pouvez lancer que EqualLines
ou ParallelLines
Le code que vous avez publié utilise les anciennes spécifications 'throw'. Pensez à les supprimer et à utiliser le nouveau spécificateur 'noexcept' si la fonction ne lance rien, et rien d'autre. Dans votre cas, veuillez informer votre professeur de ne plus utiliser cette vieille technique – Rakete1111
* Le professeur nous a dit de ne PAS modifier le fichier d'en-tête, seul le fichier .cpp peut être modifié. * - Votre professeur devrait savoir que les exceptions définies par l'utilisateur être dérivé de 'std :: exception', ie' class RuntimeException: public std :: exception {...}; ' – PaulMcKenzie
@PaulMcKenzie Pourquoi devraient-ils dériver de' std :: exception'? – 0x499602D2