cpp:function_try_blocks
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
cpp:function_try_blocks [2019/05/06 15:16] – [Exception που συμβαίνουν στον κατασκευαστή προγόνου κλάσης] gthanos | cpp:function_try_blocks [2019/05/15 08:17] – gthanos | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Εξαιρέσεις στον κατασκευαστή ====== | + | ====== Εξαιρέσεις |
Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //Name// η οποία περιγράφει ένα όνομα | Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //Name// η οποία περιγράφει ένα όνομα | ||
<code cpp Name.hpp> | <code cpp Name.hpp> | ||
+ | #include < | ||
+ | |||
class Name { | class Name { | ||
char* name; | char* name; | ||
Line 39: | Line 41: | ||
και την κλάση //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 79: | Line 72: | ||
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 main.cpp> | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | #include " | ||
+ | |||
int main() { | int main() { | ||
try { | try { | ||
Line 102: | Line 109: | ||
</ | </ | ||
- | Παρατηρήστε ότι καταστρέφεται το αντικείμενο // | + | Από τις εκτυπώσεις, |
+ | |||
+ | Ως εκ τούτου, | ||
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
- | Ο λόγος που εκτυπώνεται 2 φορές το μήνυμα **" | + | Ο λόγος που εκτυπώνεται 2 φορές το μήνυμα **" |
</ | </ | ||
===== Function Try Blocks ===== | ===== Function Try Blocks ===== | ||
- | Προκειμένου να λυθεί το συγκεκριμένο πρόβλημα η //C++// υποστηρίζει τα λεγόμενα //function try blocks//. Ουσιάστικά πρόκειται για μία ειδική σύνταξη //try - catch// που περιλαμβάνει το σύνολο του κατασκευαστή, | + | Προκειμένου να λυθεί το συγκεκριμένο πρόβλημα η //C++// υποστηρίζει τα λεγόμενα //function try blocks//. Ουσιαστικά πρόκειται για μία ειδική σύνταξη //try - catch// που περιλαμβάνει το σύνολο του κατασκευαστή, |
<code cpp > | <code cpp > | ||
Line 126: | Line 135: | ||
</ | </ | ||
- | Εάν ανανεώσετε τον κώδικα του κατασκευαστή τώρα το πρόγραμμα σας τυπώνει: | + | Εάν ανανεώσετε τον κώδικα του κατασκευαστή τώρα το πρόγραμμα σας |
< | < | ||
Line 141: | Line 150: | ||
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
- | Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση " | + | Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση " |
</ | </ | ||
===== Exception που συμβαίνουν στον κατασκευαστή της προγόνου κλάσης ===== | ===== Exception που συμβαίνουν στον κατασκευαστή της προγόνου κλάσης ===== | ||
- | Ας υποθέσουμε την κλάση //Student// που είναι απόγοντος της κλάσης //Person// και δηλώνεται ως εξής: | + | Ας υποθέσουμε την κλάση //Student// που είναι απόγονος της κλάσης //Person// και δηλώνεται ως εξής: |
<code cpp Student.hpp> | <code cpp Student.hpp> | ||
Line 160: | Line 169: | ||
</ | </ | ||
- | Εάν επιθυμούμε να " | + | Εάν επιθυμούμε να " |
- | <code cpp> | + | |
+ | <code cpp Student.hpp> | ||
class Student: public Person { | class Student: public Person { | ||
int aem; | int aem; | ||
Line 177: | Line 187: | ||
</ | </ | ||
- | Η παραπάνω σύνταξη επιτρέπει να πιάσουμε το exception που συνέβει στον κατασκευαστή της προγόνου κλάσης. Και εδώ το // | + | Η παραπάνω σύνταξη επιτρέπει να πιάσουμε το exception που συμβαίνει στον κατασκευαστή της προγόνου κλάσης. Και εδώ το // |
+ | |||
+ | Η μέθοδος //main// δίνεται παρακάτω: | ||
+ | |||
+ | <code cpp main.cpp> | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | #include " | ||
+ | #include " | ||
+ | |||
+ | int main() { | ||
+ | try { | ||
+ | Student johnSnow(" | ||
+ | } catch(BadName& | ||
+ | cout << " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
cpp/function_try_blocks.txt · Last modified: 2022/05/23 06:05 by gthanos