User Tools

Site Tools


cpp:function_try_blocks

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
cpp:function_try_blocks [2019/05/06 15:12] – created gthanoscpp:function_try_blocks [2019/05/06 15:16] – [Exception που συμβαίνουν στον κατασκευαστή προγόνου κλάσης] gthanos
Line 142: Line 142:
 <WRAP tip 80% center round> <WRAP tip 80% center round>
 Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση "μεταφέρεται" και στη συνάρτηση //main///. Ο λόγος είναι ότι υποχρεωτικά η εξαίρεση, παράγεται ξανά στο τέλος του //catch block//. Ο μόνος τρόπος να το αποφύγετε αυτό είναι να κάνετε //throw// μία εξαίρεση διαφορετικού τύπου. Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση "μεταφέρεται" και στη συνάρτηση //main///. Ο λόγος είναι ότι υποχρεωτικά η εξαίρεση, παράγεται ξανά στο τέλος του //catch block//. Ο μόνος τρόπος να το αποφύγετε αυτό είναι να κάνετε //throw// μία εξαίρεση διαφορετικού τύπου.
-</code>+</WRAP>
  
 ===== Exception που συμβαίνουν στον κατασκευαστή προγόνου κλάσης ===== ===== Exception που συμβαίνουν στον κατασκευαστή προγόνου κλάσης =====
Line 149: Line 149:
  
 <code cpp Student.hpp> <code cpp Student.hpp>
-Student::Student(const char *first, const char *last, int id) try: Person(first, last), aem(id) {+class Student: public Person { 
 +  int aem; 
 +public: 
 +  Student(const char *first, const char *last, int id); 
 +}; 
 + 
 +Student::Student(const char *first, const char *last, int id): Person(first, last), aem(id) {
   cout << "Student constructor" << endl;   cout << "Student constructor" << endl;
 +
 +</code>
 +
 +Εάν επιθυμούμε να "πιάσουμε" την εξαίρεση εντός του κατασκευαστή της κλάσης //Student// θα πρέπει να την ξαναγράψουμε εξής:
 +<code cpp>
 +class Student: public Person {
 +  int aem;
 +public:
 +  Student(const char *first, const char *last, int id);
 +};
 +
 +Student::Student(const char *first, const char *last, int id) try : Person(first, last), aem(id) {
 +  cout << "Student constructor" << endl;
 +
 +catch(BadName& ex) {
 +  cout << "--> firstname deleted!" << endl;
 +  delete firstname;
 } }
 </code> </code>
 +
 +Η παραπάνω σύνταξη επιτρέπει να πιάσουμε το exception που συνέβει στον κατασκευαστή της προγόνου κλάσης. Και εδώ το //exception// θα ξανα-παραχθεί σύμφωνά με τους κανόνες που ίσχυσαν και στο προηγούμενο παράδειγμα.
  
cpp/function_try_blocks.txt · Last modified: 2022/05/23 06:05 by gthanos