cpp:function_try_blocks
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| cpp:function_try_blocks [2019/05/15 08:16] – gthanos | cpp:function_try_blocks [2022/05/23 06:05] (current) – [Εξαιρέσεις που παράγονται στον κατασκευαστή] gthanos | ||
|---|---|---|---|
| Line 32: | Line 32: | ||
| Name& Name:: | Name& Name:: | ||
| + | cout << "--- Operator= ---\n"; | ||
| if(name != nullptr) | if(name != nullptr) | ||
| free(name); | free(name); | ||
| Line 45: | Line 46: | ||
| </ | </ | ||
| - | Επιπλέον ο κατασκευαστή της κλάση Person παράγει ένα // | + | Επιπλέον ο κατασκευαστή της κλάση Person παράγει ένα // |
| - | + | ||
| - | <code cpp BadName.hpp> | + | |
| - | class BadName : public std:: | + | |
| - | public: | + | |
| - | const char* what() { | + | |
| - | return " | + | |
| - | } | + | |
| - | }; | + | |
| - | </ | + | |
| <code cpp Person.hpp> | <code cpp Person.hpp> | ||
| Line 81: | Line 73: | ||
| delete firstname; | delete firstname; | ||
| } | } | ||
| + | </ | ||
| + | |||
| + | <code cpp BadName.hpp> | ||
| + | class BadName : public std:: | ||
| + | public: | ||
| + | const char* what() { | ||
| + | return " | ||
| + | } | ||
| + | }; | ||
| </ | </ | ||
| Εάν μεταγλωττίσουμε και εκτελέσουμε την παρακάτω συνάρτηση //main// ο κώδικας εκτυπώνει τα εξής: | Εάν μεταγλωττίσουμε και εκτελέσουμε την παρακάτω συνάρτηση //main// ο κώδικας εκτυπώνει τα εξής: | ||
| - | <code cpp main.cpp> | + | <code cpp CreatePerson.cpp> |
| #include < | #include < | ||
| using namespace std; | using namespace std; | ||
| Line 104: | Line 105: | ||
| Name constructor: | Name constructor: | ||
| Name constructor: | Name constructor: | ||
| + | --- Operator= --- | ||
| Name destructor: Snow | Name destructor: Snow | ||
| Name destructor: Snow | Name destructor: Snow | ||
| - | Occured: BadName | + | Exception occured: BadName |
| </ | </ | ||
| Line 114: | Line 116: | ||
| <WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
| - | Ο λόγος που εκτυπώνεται 2 φορές το μήνυμα **" | + | Ο λόγος που εκτυπώνεται 2 φορές το μήνυμα **" |
| </ | </ | ||
| Line 130: | Line 132: | ||
| } | } | ||
| catch(BadName& | catch(BadName& | ||
| - | cout << " | + | cout << "\n--> firstname deleted!" |
| delete firstname; | delete firstname; | ||
| } | } | ||
| Line 142: | Line 144: | ||
| Name constructor: | Name constructor: | ||
| Name constructor: | Name constructor: | ||
| + | --- Operator= --- | ||
| Name destructor: Snow | Name destructor: Snow | ||
| Name destructor: Snow | Name destructor: Snow | ||
| + | |||
| --> firstname deleted! | --> firstname deleted! | ||
| Name destructor: John | Name destructor: John | ||
| - | Occured: BadName | + | Exception occured: BadName |
| </ | </ | ||
| - | < | + | < |
| - | Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση " | + | Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση " |
| </ | </ | ||
| Line 169: | Line 173: | ||
| </ | </ | ||
| - | Εάν επιθυμούμε να " | + | Εάν επιθυμούμε να " |
| <code cpp Student.hpp> | <code cpp Student.hpp> | ||
| Line 187: | Line 191: | ||
| </ | </ | ||
| - | Η παραπάνω σύνταξη επιτρέπει να πιάσουμε το exception που συμβαίνει στον κατασκευαστή της προγόνου κλάσης. Και εδώ το // | + | Η παραπάνω σύνταξη επιτρέπει να πιάσουμε το exception που συμβαίνει στον κατασκευαστή της προγόνου κλάσης. Και εδώ το // |
| + | |||
| + | <WRAP tip 80% center round> | ||
| + | Παρατηρήστε ότι δεν εκτυπώνεται ποτέ το μήνυμα **" | ||
| + | </ | ||
| Η μέθοδος //main// δίνεται παρακάτω: | Η μέθοδος //main// δίνεται παρακάτω: | ||
cpp/function_try_blocks.1557908205.txt.gz · Last modified: 2019/05/15 07:16 (external edit)
