User Tools

Site Tools


cpp:exception

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
Next revisionBoth sides next revision
cpp:exception [2018/05/18 12:33] gthanoscpp:exception [2018/05/18 12:51] – [Τύποι παραγόμενων εξαιρέσεων] gthanos
Line 116: Line 116:
 </code> </code>
  
 +<WRAP tip 80% center round>
 Αν και στο παραπάνω απλό παράδειγμα είναι προφανές ότι είναι πιο απλό να ελέγξει κανείς το μέγεθος της παραμέτρου size πριν καλέσει τον κατασκευαστή, κάτι τέτοιο είναι δύσκολο να εφαρμοστεί σε όλες τις περιπτώσεις, όπως για παράδειγμα το μέγεθος **size** παράγεται δυναμικά από το πρόγραμμα και ο κατασκευαστής καλείται σε αρκετά διαφορετικά σημεία του προγράμματος. Αν και στο παραπάνω απλό παράδειγμα είναι προφανές ότι είναι πιο απλό να ελέγξει κανείς το μέγεθος της παραμέτρου size πριν καλέσει τον κατασκευαστή, κάτι τέτοιο είναι δύσκολο να εφαρμοστεί σε όλες τις περιπτώσεις, όπως για παράδειγμα το μέγεθος **size** παράγεται δυναμικά από το πρόγραμμα και ο κατασκευαστής καλείται σε αρκετά διαφορετικά σημεία του προγράμματος.
 +</WRAP>
 ===== Τύποι παραγόμενων εξαιρέσεων ===== ===== Τύποι παραγόμενων εξαιρέσεων =====
  
Line 129: Line 130:
 throw MyException("Fatal!");  // Throw an object of class MyException throw MyException("Fatal!");  // Throw an object of class MyException
 </code> </code>
 +
 +===== Δημιουργία και διαχείριση της εξαίρεσης =====
 +
 +Όπως σε όλες τις γλώσσες αντικειμενοστραφούς προγραμματισμού η παραγωγή μιας εξαίρεσης θα πρέπει να γίνει μέσα σε ένα //try block// και η διαχείριση της μέσα σε ένα //catch block// που ακολουθεί το //try block//. Δείτε το παρακάτω ενδεικτικό παράδειγμα.
 +
 +<code cpp ExceptionHandling.cpp>
 +#include <iostream>
 +using namespace std;
 +
 +class MyException: public std::exception {
 +  const char* what() {
 +    return "Just another std::exception";
 +  }
 +}
 +
 +int main() {
 +  try {
 +    throw 1;
 +    throw 2.5;
 +    throw "C++";
 +    MyException ex; throw ex;
 +  } catch(int ex) {
 +    cout << "Got '<< ex <<"'!\n";
 +  } catch(double ex) {
 +    cout << "Got '<< ex <<"'!\n";
 +  } catch(const char *ex) {
 +    cout << "Got '<< ex <<"'!\n";
 +  } catch(const string &ex) {
 +    cout << "Got '<< ex <<"'!\n";
 +  } catch(const MyException &ex) {
 +    cout << "Got '<< ex.what() <<"'!\n";
 +  } 
 +}
 +</code>
 +
  
  
  
cpp/exception.txt · Last modified: 2023/05/15 14:01 by gthanos