cpp:exception
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| cpp:exception [2019/05/15 07:07] – [Δημιουργία και διαχείριση της εξαίρεσης] gthanos | cpp:exception [2023/05/15 14:01] (current) – gthanos | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Δημιουργία | + | ====== Δημιουργία |
| Ας εξετάσουμε την κλάση **Vector** που είδαμε στην ενότητα της υπερφόρτωση τελεστών. Ο προσδιοριστής //nothrow// σε συνδυασμό με τον τελεστή **new** μας υποχρεώνει να ελέγξουμε την επιστρεφόμενη τιμή του τελεστή **new** για να δούμε έαν έχει αποτύχει η διαδικασία δέσμευσης μνήμης ή όχι και στην περίπτωση που έχουμε αποτυχία τερματίζουμε το πρόγραμμα. | Ας εξετάσουμε την κλάση **Vector** που είδαμε στην ενότητα της υπερφόρτωση τελεστών. Ο προσδιοριστής //nothrow// σε συνδυασμό με τον τελεστή **new** μας υποχρεώνει να ελέγξουμε την επιστρεφόμενη τιμή του τελεστή **new** για να δούμε έαν έχει αποτύχει η διαδικασία δέσμευσης μνήμης ή όχι και στην περίπτωση που έχουμε αποτυχία τερματίζουμε το πρόγραμμα. | ||
| - | <code cpp Vector.cpp> | + | <code cpp Vector.hpp> |
| #include < | #include < | ||
| #include < | #include < | ||
| Line 11: | Line 11: | ||
| class Vector { | class Vector { | ||
| int *array; | int *array; | ||
| - | | + | |
| | | ||
| public: | public: | ||
| - | Vector(int length=0); | + | Vector(long length=0); |
| ~Vector(); | ~Vector(); | ||
| int & | int & | ||
| }; | }; | ||
| + | </ | ||
| - | Vector:: | + | <code cpp Vector.cpp> |
| + | #include " | ||
| + | Vector:: | ||
| size = length; | size = length; | ||
| array = new (nothrow) int[size]; | array = new (nothrow) int[size]; | ||
| Line 35: | Line 38: | ||
| int & | int & | ||
| - | if(pos>=length()) { | + | if(pos>=size) { |
| cerr << " | cerr << " | ||
| | | ||
| Line 43: | Line 46: | ||
| </ | </ | ||
| - | Αν και η παραπάνω διαδικασία δεν είναι λανθασμένη, | + | Αν και η παραπάνω διαδικασία δεν είναι λανθασμένη, |
| <code cpp VectorUse.cpp> | <code cpp VectorUse.cpp> | ||
| - | #include " | + | #include " |
| int main() { | int main() { | ||
| - | | + | |
| cout << "Enter verctor size: "; | cout << "Enter verctor size: "; | ||
| cin >> size; | cin >> size; | ||
| Line 60: | Line 63: | ||
| Η παραγωγή ενός // | Η παραγωγή ενός // | ||
| - | <code cpp Vector.cpp> | + | <code cpp Vector.hpp> |
| #include < | #include < | ||
| #include < | #include < | ||
| Line 68: | Line 71: | ||
| class Vector { | class Vector { | ||
| int *array; | int *array; | ||
| - | | + | |
| | | ||
| public: | public: | ||
| - | Vector(int length=0); | + | Vector(long length=0); |
| ~Vector(); | ~Vector(); | ||
| int & | int & | ||
| }; | }; | ||
| - | Vector:: | + | </ |
| + | |||
| + | <code cpp Vector.cpp> | ||
| + | #include " | ||
| + | |||
| + | Vector:: | ||
| size = length; | size = length; | ||
| array = new int[size]; | array = new int[size]; | ||
| Line 97: | Line 105: | ||
| <code cpp VectorUse.cpp> | <code cpp VectorUse.cpp> | ||
| - | #include " | + | #include " |
| int main() { | int main() { | ||
| - | | + | |
| - | | + | |
| - | cout << "Enter verctor size: "; | + | cout << "Enter verctor size: "; |
| - | cin >> size; | + | cin >> size; |
| - | try { | + | try { |
| - | Vector v(size); | + | Vector v(size); |
| - | } catch(std:: | + | } catch(std:: |
| - | cout << "Vector size should be a positive integer! Retry...\n"; | + | std::cout << "Allocation failure!\n"; |
| - | continue; | + | |
| - | } | + | } |
| - | | + | |
| - | v.valueAt(i) = 100-1; | + | |
| - | } while(size< | + | |
| } | } | ||
| </ | </ | ||
| <WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
| - | Στο παραπάνω απλό παράδειγμα είναι προφανές ότι είναι πιο απλό να ελέγξει κανείς το μέγεθος της παραμέτρου //size// πριν καλέσει τον κατασκευαστή. Σε αυτή την περίπτωση, | + | Στο παραπάνω απλό παράδειγμα είναι προφανές ότι είναι πιο απλό να ελέγξει κανείς το μέγεθος της παραμέτρου //size// πριν καλέσει τον κατασκευαστή. Σε αυτή την περίπτωση, |
| </ | </ | ||
| Line 199: | Line 205: | ||
| } | } | ||
| </ | </ | ||
| - | πιάνει όλους τους τύπους | + | διαχειρίζεται όλους τους τύπους |
| + | |||
| + | Εφόσον, | ||
| </ | </ | ||
cpp/exception.1557904036.txt.gz · Last modified: 2019/05/15 06:07 (external edit)
