cpp:exception_inheritance
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:exception_inheritance [2019/05/06 08:03] – gthanos | cpp:exception_inheritance [2023/05/15 14:08] (current) – gthanos | ||
---|---|---|---|
Line 6: | Line 6: | ||
using namespace std; | using namespace std; | ||
- | class BaseException: public std:: | + | class BaseException { |
protected: | protected: | ||
int a; | int a; | ||
Line 12: | Line 12: | ||
public: | public: | ||
BaseException(int a) { this->a = a; } | BaseException(int a) { this->a = a; } | ||
- | | + | |
sprintf(s, " | sprintf(s, " | ||
return s; | return s; | ||
Line 27: | Line 27: | ||
public: | public: | ||
DerivedException(int a, int b): BaseException(a) { this->b = b; } | DerivedException(int a, int b): BaseException(a) { this->b = b; } | ||
- | | + | char* message() { |
sprintf(s, " | sprintf(s, " | ||
return s; | return s; | ||
Line 55: | Line 55: | ||
} | } | ||
} catch(BaseException ex) { | } catch(BaseException ex) { | ||
- | cout << ex.what(); | + | cout << ex.message(); |
} catch(DerivedException ex) { | } catch(DerivedException ex) { | ||
- | cout << ex.what(); | + | cout << ex.message(); |
} | } | ||
return 0; | return 0; | ||
Line 85: | Line 85: | ||
</ | </ | ||
- | Παρατηρήστε ότι ενώ στην 2η περίπτωση παράγεται ένα // | + | Παρατηρήστε ότι ενώ στην 2η περίπτωση παράγεται ένα // |
Η απάντηση στο παραπάνω ερώτημα είναι ότι αν και παράγεται ένα αντικείμενο τύπου // | Η απάντηση στο παραπάνω ερώτημα είναι ότι αν και παράγεται ένα αντικείμενο τύπου // | ||
- | Ο τρόπος για να δουλέψει σωστά ο παραπάνω κώδικας είναι μέσα στο //catch block// να μην περάσουμε το αντικείμενο γιατί δημιουργείται αντίγραφο, | + | Ο τρόπος για να δουλέψει σωστά ο παραπάνω κώδικας είναι μέσα στο //catch block// να μην περάσουμε το αντικείμενο γιατί δημιουργείται αντίγραφο |
<code cpp ExceptionUse.cpp> | <code cpp ExceptionUse.cpp> | ||
#include < | #include < | ||
- | #include " | + | #include " |
using namespace std; | using namespace std; | ||
Line 112: | Line 112: | ||
} | } | ||
} catch(BaseException &ex) { | } catch(BaseException &ex) { | ||
- | cout << ex.what(); | + | cout << ex.message(); |
} catch(DerivedException &ex) { | } catch(DerivedException &ex) { | ||
- | cout << ex.what(); | + | cout << ex.message(); |
} | } | ||
return 0; | return 0; | ||
Line 131: | Line 131: | ||
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
- | Το πιάσιμο μιας εξαίρεσης με χρήση αναφοράς για αντικείμενα σύνθετου τύπου (όχι char, int, long, double κλπ), διότι //α)// αποφεύγουμε την αντιγραφή του αντικειμένου μέσα στο //catch block// (πιο γρήγορος κώδικας) και //β)// αποφεύγουμε την " | + | Συνιστάται, η διαχείριση |
</ | </ | ||
cpp/exception_inheritance.1557129834.txt.gz · Last modified: 2019/05/06 07:03 (external edit)