Moin,
Dein Beispiel in Ehren aber es zeigt ja keinen Vorteil.
Dann mal Butter bei die Fische: Wenn das ParserException-Objekt keinen Vorteil zu einem Fehlercode darstellt, dann zeig doch mal bitte deine Lösung für das von mir geschilderte Beispiel. Kritisieren kann jeder, konstruktive Kritik fehlt meist.
Und alles in englisch auzugeben ist auch kein Vorteil von OOP.
Darauf zielt auch keines meiner Beispiele ab. Die ggf. (!) auszugeben Fehlermeldungen können auch auf klingonisch sein.
Vielmehr ist OOP eine praktische Angelegenheit. Und eigentlich nur eine Art und Weise wie man seinen Code zweckmäßig organisiert.
Meine Beispiele zeigen sehr deutlich, wie man mit Hilfe von OOP Code praktisch und zweckmäßig organisieren kann.
Wesentlich an OOP ist, daß Instanzen von Klassen erstellt werden, die deswegen Instanzen sind weil sie wissen zu welcher Klasse sie gehören und damit ihren Namespace kennen sowie die Methoden die sie aufrufen dürfen. Dafür tragen Instanzen Eigenschaften mit sich rum die sehr komplex sein können.
Klassen können auch abgeleitet sein und das Objekt weiß das dann auch. Und genau das lässt sich im Exceptionhandling sehr praktisch ausnutzen.
In c++, so habe ich das auch mal gelernt, wird eine Instanz mit
new()
erstellt. Ebenso erstellt aber auchthrow()
eine neue Instanz. Nämlich der Klasse die da übergeben wird.
throw
(ohne Klammern!) erzeugt nicht zwingend eine neue Instanz:
struct SimpleException {
SimpleException(const int code) : _err(code) {}
int _err;
};
SimpleException se(42);
try {
throw se;
}
catch (SimpleException &ex) {
std::cout << "einfache Exception mit Fehlercode " << ex._err << " gefangen.\n";
}
Allein aus diesem Sachverhalt jedoch ergibt sich kein Vorteil in Sachen EXns.
Das ist ja auch nicht der einzige Aspekt, der für Exception-Objekte spricht.
Viele Grüße
Robert