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/06 19:53] – [Exception που συμβαίνουν στον κατασκευαστή της προγόνου κλάσης] 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 41: | Line 42: | ||
και την κλάση //Person// η οποία περιγράφει έναν άνθρωπο. Η κλάση διαθέτει τα εξής δύο πεδία: | και την κλάση //Person// η οποία περιγράφει έναν άνθρωπο. Η κλάση διαθέτει τα εξής δύο πεδία: | ||
<code cpp> | <code cpp> | ||
- | Name* firstname; | + | Name* firstname; |
- | Name lastname; | + | Name lastname; |
</ | </ | ||
- | Επιπλέον ο κατασκευαστή της κλάση 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 |
</ | </ | ||
- | Από τις εκτυπώσεις, | + | Από τις εκτυπώσεις, |
- | Ως εκ τούτου, | + | Ως εκ τούτου, |
<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.1557172433.txt.gz · Last modified: 2019/05/06 18:53 (external edit)