Problem bei Vereinfachung einer Ausnahme
-
Was passiert denn, wenn Du Deine Klasse
null_division
vonstd::runtime_error
erben lässt?
-
es lässt sich nicht mehr kompilieren und ich kriege den error das die klasse runtime_error keinen default konstruktor hat
bin ich dumm oder so?
-
Dann guck dir doch mal an, was für Parameter der Konstruktor so nimmt:
https://en.cppreference.com/w/cpp/error/runtime_errorKönnte der ggf. für dich nützlich sein?
-
@wob ja, denke schon, ich wüsste aber nicht wie ich den anwenden soll damit am ende die gleiche nachricht wie davor rauskommt
-
@hilfmir sagte in Problem bei Vereinfachung einer Ausnahme:
ich kriege den error das die klasse runtime_error keinen default konstruktor hat
Aha. Und wo in Deinem Code glaubst Du könnte der vonnöten sein?
-
@hilfmir sagte in Problem bei Vereinfachung einer Ausnahme:
ich wüsste aber nicht wie ich den anwenden soll
Vielleicht bringt dich die Beantwortung folgender Frage weiter:
Wie/wo ruft man denn den Konstruktor derjenigen Klasse auf, von der man erbt? Insbesondere wo in der abgeleiteten Klasse macht man das?
-
Noch ein Tipp: bei der Klasse
null_division
hast du die Syntax auch schon benutzt.
-
okay habs.
hier ist der code falls ihn wer braucht/will:... #include <iostream> #include <string> #include <stdexcept> using namespace std; //Klasse der Ausnahme class null_division : public runtime_error { public: null_division() : runtime_error("Division misslungen, bitte eine Zahl ungleich 0 eingeben.") { } }; double division(double a, double b) { if (b == 0) throw null_division(); return (a / b); } int main() { double N1, N2; N2 = 0; while (N2 == 0) { try { cout << "Ganzzahl 1: "; cin >> N1; cout << "Ganzzahl 2: "; cin >> N2; cout << N1 << " / " << N2 << " = " << division(N1, N2) << endl; system("pause"); } catch (null_division &ex) { cerr << ex.what() << endl; system("pause"); } } } ...
-
@swordfish sagte in Problem bei Vereinfachung einer Ausnahme:
@hustbaer sagte in Problem bei Vereinfachung einer Ausnahme:
dann schreib ich
tjoa
Nur weil ich es höflich und indirekt formuliert habe heisst das nicht dass deine Variante nicht total doof ist.
-
@hustbaer "tjoa" bedeutete so viel wie "zur Kenntnis genommen". Aber jetzt, wo Du das Bedürfnis hattest, es nochmal anzusprechen, würde mich doch interessieren warum meine Variante total doof ist, obwohl eigentlich jedem auf den ersten Blick klar sein müsste, daß beide Varianten aufs selbe rauslaufen. Also mit schlechter Lesbarkeit wirst wohl nicht argumentieren wollen.
-
@swordfish Also ich kenne "tjoa" in dem Zusammenhang eher als "tjo, is deine Meinung, mir aber voll wurscht"
War also ein Misverständnis.Was das
!n
angeht, für mich kommt das einfach darauf an ob "not n" für mich stimmig klingt. Also wenn 0 heisst "nicht vorhanden" dann ist das für mich OK. Beispielsweise wenn ich ein handle hab wo 0 "invalid handle" bedeutet, dann ist!handle
für mich völlig klar und stimmig. Wenn ich aber eine Zahl habe mit der ich einfach nur rechnen will, ... 0 ist ja eigentlich eine ganz normale Zahl. Ich hab also nicht "keine Zahl" sondern nur einen Spezialfall in dem ich halt einfach nicht dividieren kann, und dieser ist 0. Alson == 0
.Sobald die Zahl mit einer Semantik behaftet ist wird
!n
für mich subjektiv wieder häufiger OK. z.B. wenn es eine Anzahl/Länge/Grösse ist dann ist!count
oder!length
eher OK. Wenn es um Koordinaten geht und ich prüfen möchte ob etwas im Ursprung liegt würde ich aber auch nicht!x && !y
schreiben sondernx == 0 && y == 0
. Weil!koordinate
einfach komisch ist. Ich hab ja eine Koordinate, nur ist sie halt 0.
-
@hustbaer sagte in Problem bei Vereinfachung einer Ausnahme:
Wenn es um Koordinaten geht und ich prüfen möchte ob etwas im Ursprung liegt würde ich aber auch nicht !x && !yschreiben sondern x == 0 && y == 0. Weil !koordinate einfach komisch ist. Ich hab ja eine Koordinate, nur ist sie halt 0.
Damit hast Du mich überzeugt!