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 revisionBoth sides next revision
cpp:exception [2021/05/07 14:49] gthanoscpp:exception [2022/05/23 03:52] gthanos
Line 3: Line 3:
 Ας εξετάσουμε την κλάση **Vector** που είδαμε στην ενότητα της υπερφόρτωση τελεστών. Ο προσδιοριστής //nothrow// σε συνδυασμό με τον τελεστή **new** μας υποχρεώνει να ελέγξουμε την επιστρεφόμενη τιμή του τελεστή **new** για να δούμε έαν έχει αποτύχει η διαδικασία δέσμευσης μνήμης ή όχι και στην περίπτωση που έχουμε αποτυχία τερματίζουμε το πρόγραμμα.  Ας εξετάσουμε την κλάση **Vector** που είδαμε στην ενότητα της υπερφόρτωση τελεστών. Ο προσδιοριστής //nothrow// σε συνδυασμό με τον τελεστή **new** μας υποχρεώνει να ελέγξουμε την επιστρεφόμενη τιμή του τελεστή **new** για να δούμε έαν έχει αποτύχει η διαδικασία δέσμευσης μνήμης ή όχι και στην περίπτωση που έχουμε αποτυχία τερματίζουμε το πρόγραμμα. 
  
-<code cpp Vector.cpp>+<code cpp Vector.hpp>
 #include <iostream> #include <iostream>
 #include <cstdlib> #include <cstdlib>
Line 18: Line 18:
   int &valueAt(int pos) const;  // returns a reference to element at position pos   int &valueAt(int pos) const;  // returns a reference to element at position pos
 }; };
 +</code>
  
 +<code cpp Vector.cpp>
 +#include "Vector.hpp"
 Vector::Vector(int length) { Vector::Vector(int length) {
   size = length;   size = length;
Line 46: Line 49:
  
 <code cpp VectorUse.cpp> <code cpp VectorUse.cpp>
-#include "Vector.cpp"+#include "Vector.hpp"
  
 int main() { int main() {
Line 60: Line 63:
 Η παραγωγή ενός //exception// μπορεί να επιλύσει πιο αποτελεσματικά το παραπάνω πρόβλημα, διότι υποστηρίζει τη διαχείριση συμβάντων που δεν επιτρέπουν την ομαλή εκτέλεση του προγράμματος. Στο παράδειγμα του κατασκευαστή της κλάσης **Vector**, η αποτυχία κλήσης του τελεστή **new** (χωρίς τον προσδιοριστή //notrhow//) παράγει ένα //exception// τύπου [[http://www.cplusplus.com/reference/new/bad_alloc/|std::bad_alloc]], το οποίο μπορούμε να διαχειριστούμε στη μέθοδο //main//, όπως παρακάτω: Η παραγωγή ενός //exception// μπορεί να επιλύσει πιο αποτελεσματικά το παραπάνω πρόβλημα, διότι υποστηρίζει τη διαχείριση συμβάντων που δεν επιτρέπουν την ομαλή εκτέλεση του προγράμματος. Στο παράδειγμα του κατασκευαστή της κλάσης **Vector**, η αποτυχία κλήσης του τελεστή **new** (χωρίς τον προσδιοριστή //notrhow//) παράγει ένα //exception// τύπου [[http://www.cplusplus.com/reference/new/bad_alloc/|std::bad_alloc]], το οποίο μπορούμε να διαχειριστούμε στη μέθοδο //main//, όπως παρακάτω:
  
-<code cpp Vector.cpp>+<code cpp Vector.hpp>
 #include <iostream> #include <iostream>
 #include <cstdlib> #include <cstdlib>
Line 75: Line 78:
   int &valueAt(int pos) const;  // returns a reference to element at position pos   int &valueAt(int pos) const;  // returns a reference to element at position pos
 }; };
 +
 +</code>
 +
 +<code cpp Vector.cpp>
 +#include "Vector.hpp"
  
 Vector::Vector(int length) { Vector::Vector(int length) {
Line 97: Line 105:
  
 <code cpp VectorUse.cpp> <code cpp VectorUse.cpp>
-#include "Vector.cpp"+#include "Vector.hpp"
  
 int main() { int main() {
cpp/exception.txt · Last modified: 2023/05/15 14:01 by gthanos