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

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
cpp:function_try_blocks [2019/05/15 08:23] – [Function Try Blocks] gthanoscpp:function_try_blocks [2022/05/23 06:04] – [Function Try Blocks] gthanos
Line 32: Line 32:
  
 Name& Name::operator=(const Name& a) { Name& Name::operator=(const Name& a) {
 +  cout << "--- Operator= ---\n";
   if(name != nullptr)    if(name != nullptr) 
     free(name);     free(name);
Line 84: Line 85:
  
 Εάν μεταγλωττίσουμε και εκτελέσουμε την παρακάτω συνάρτηση //main// ο κώδικας εκτυπώνει τα εξής: Εάν μεταγλωττίσουμε και εκτελέσουμε την παρακάτω συνάρτηση //main// ο κώδικας εκτυπώνει τα εξής:
-<code cpp main.cpp>+<code cpp CreatePerson.cpp>
 #include <iostream> #include <iostream>
 using namespace std; using namespace std;
Line 142: Line 143:
 Name constructor: John Name constructor: John
 Name constructor: Snow Name constructor: Snow
 +--- Operator= ---
 Name destructor: Snow Name destructor: Snow
 Name destructor: Snow Name destructor: Snow
Line 150: Line 152:
 </code> </code>
  
-<WRAP tip 80% center round> +<WRAP important 80% center round> 
-Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση "μεταφέρεται" και στη συνάρτηση //main///. Ο λόγος είναι ότι η εξαίρεση, αναπαράγεται αυτόματα στο τέλος του //catch block//. Ο μόνος τρόπος να το αποφύγετε αυτό είναι να κάνετε //throw// μία νέα εξαίρεση, διαφορετικού τύπου.+Παρατηρήστε ότι αν και εκτελείται ο κώδικας μέσα στο //catch block//, η εξαίρεση "μεταφέρεται" και στη συνάρτηση //main//. Ο λόγος είναι ότι η εξαίρεση, **αναπαράγεται αυτόματα** στο τέλος του //catch block//. Ο μόνος τρόπος να το αποφύγετε αυτό είναι να κάνετε //throw// μία νέα εξαίρεση, διαφορετικού τύπου.
 </WRAP> </WRAP>
  
Line 170: Line 172:
 </code> </code>
  
-Εάν επιθυμούμε να "πιάσουμε" την εξαίρεση εντός του κατασκευαστή της κλάσης //Student// θα πρέπει να κρατήσουμε τον κατασκευαστή της κλάσης //Person// στην αρχική του μορφή και να ξαναγράψουμε τον κατασκευαστή:+Εάν επιθυμούμε να "πιάσουμε" την εξαίρεση εντός του κατασκευαστή της κλάσης //Student// και όχι εντός της //Person//, θα πρέπει να κρατήσουμε τον κατασκευαστή της κλάσης //Person// στην αρχική του μορφή (πριν την τελευταία αλλαγή) και να ξαναγράψουμε τον κατασκευαστή της κλάσης //Student// ως εξής:
  
 <code cpp Student.hpp> <code cpp Student.hpp>
Line 188: Line 190:
 </code> </code>
  
-Η παραπάνω σύνταξη επιτρέπει να πιάσουμε το exception που συμβαίνει στον κατασκευαστή της προγόνου κλάσης. Και εδώ το //exception// θα αναπαραχθεί σύμφωνα με τους κανόνες που ίσχυσαν και στο προηγούμενο παράδειγμα. Παρατηρήστε ότι δεν εκτυπώνεται ποτέ το μήνυμα **"Student constructor"** του κατασκευαστή. Γιατί?+Η παραπάνω σύνταξη επιτρέπει να πιάσουμε το exception που συμβαίνει στον κατασκευαστή της προγόνου κλάσης. Και εδώ το //exception// θα αναπαραχθεί σύμφωνα με τους κανόνες που ίσχυσαν και στο προηγούμενο παράδειγμα.  
 + 
 +<WRAP tip 80% center round> 
 +Παρατηρήστε ότι δεν εκτυπώνεται ποτέ το μήνυμα **"Student constructor"** του κατασκευαστή. Γιατί? 
 +</WRAP>
  
 Η μέθοδος //main// δίνεται παρακάτω: Η μέθοδος //main// δίνεται παρακάτω:
cpp/function_try_blocks.txt · Last modified: 2022/05/23 06:05 by gthanos