Προσαρμοσμένες εξαιρέσεις C++

Prosarmosmenes Exaireseis C



Η εξαίρεση στη C++ είναι μια βασική έννοια. Παρουσιάζεται εξαίρεση στο χρόνο εκτέλεσης όταν το πρόγραμμα αντιμετωπίζει ασυνέπειες χρόνου εκτέλεσης ή ασυνήθιστα σενάρια. Στην C++, οι όροι «ρίξω», «δοκιμάζω» και «πιάσιμο» χρησιμοποιούνται για να χειριστούν ή να πιάσουν την εξαίρεση. Η εντολή 'ρίψη' χρησιμοποιείται για τη δημιουργία της εξαίρεσης. Ο όρος 'δοκιμάζω' χρησιμεύει για την απόρριψη της εξαίρεσης και η λέξη-κλειδί 'πιάσιμο' αντιπροσωπεύει το χειρισμό μιας εξαίρεσης που αναπτύσσεται με τον όρο 'ρίψη' και εμφανίζεται από την ενότητα 'δοκιμάζω'. Ας δούμε μερικά παραδείγματα για να δείξουμε τις εξαιρέσεις στη C++.

Παράδειγμα 1: Πρόγραμμα για τη δημιουργία μιας προσαρμοσμένης κλάσης εξαίρεσης στη C++

Αυτό το απλό παράδειγμα υλοποιείται για να επιδείξει τον χειρισμό και τον εντοπισμό προσαρμοσμένων εξαιρέσεων στη C++.

#include
#include <εξαίρεση>
χρησιμοποιώντας χώρο ονομάτων std ;

τάξη DemoException : δημόσιο εξαίρεση
{
εικονικός συνθ απανθρακώνω * τι ( ) συνθ βολή ( )
{
ΕΠΙΣΤΡΟΦΗ 'Caught Custom Exception' ;
}
} ;
ενθ κύριος ( )
{
DemoException dEx ;
δοκιμάστε
{
βολή dEx ;
}
σύλληψη ( εξαίρεση & εκτός )
{
cout << εκτός. τι ( ) << endl ;
}
ΕΠΙΣΤΡΟΦΗ 0 ;
}

Ορίζουμε το αρχείο κεφαλίδας στον κώδικα συμπεριλαμβανομένων των 'iostream' και 'exception'. Το 'iostream' καλείται ειδικά για τη ροή εισόδου και εξόδου, ενώ η βιβλιοθήκη 'εξαίρεσης' καλείται για να χειριστεί την εξαίρεση. Μετά από αυτό, δημιουργούμε την κλάση «DemoException» που προέρχεται από την κλάση «εξαίρεση» της C++. Εδώ, ορίζουμε τη συνάρτηση virtual what() που χρησιμοποιείται για την παροχή του const char* που εμφανίζει τα αποτελέσματα ενός μηνύματος σφάλματος που συνδέεται με την εξαίρεση.







Στη συνέχεια, καλούμε μια συνάρτηση main() όπου δημιουργούμε το αντικείμενο «dEx» της κλάσης «DemoException». Μετά από αυτό, έχουμε έναν ορισμό μπλοκ 'δοκιμάστε' που ρίχνει την εξαίρεση εάν συναντηθεί. Εδώ, ρίχνουμε το αντικείμενο 'dEx'.



Στη συνέχεια, ορίζουμε το μπλοκ 'catch' για να συλλάβει την εξαίρεση και να τη χειριστεί. Περνάμε την αναφορά της εξαίρεσης κλάσης ως παράμετρο για να συλλάβουμε την εξαίρεση που προέρχεται από αυτήν. Μέσα στο μπλοκ 'catch', καλούμε τη συνάρτηση what() στο 'except' για να λάβουμε το μήνυμα εξαίρεσης στην κονσόλα.



Μετά την εκτέλεση του συγκεκριμένου προγράμματος, το μήνυμα προσαρμοσμένης εξαίρεσης πιάνεται και ρίχνεται στην κονσόλα:





Παράδειγμα 2: Πρόγραμμα για τη δημιουργία προσαρμοσμένης εξαίρεσης με χρήση δύο κλάσεων

Το πρόγραμμα δίνει έμφαση στην αντιμετώπιση πολλαπλών εξαιρέσεων που μπορούν να αντιμετωπιστούν ανεξάρτητα ορίζοντας πολλαπλές κλάσεις.



#include
χρησιμοποιώντας χώρο ονομάτων std ;

τάξη αξιολόγηση 1 { } ;
τάξη αξιολόγηση2 { } ;

ενθ κύριος ( ) {
δοκιμάστε {
βολή αξιολόγηση 1 ( ) ;
}
σύλληψη ( αξιολόγηση1 ε ) {
cout << 'Εξαίρεση Evaluation1 Called!' << endl ;
}
δοκιμάστε {
βολή αξιολόγηση2 ( ) ;
}
σύλληψη ( αξιολόγηση2 ε ) {
cout << 'Εξαίρεση αξιολόγησης 2 Πιάστηκε!' << endl ;
}

ΕΠΙΣΤΡΟΦΗ 0 ;
}

Στον κώδικα που δίνεται, έχουμε τον ορισμό δύο κλάσεων, 'Evaluation1' και 'Evaluation2', οι οποίες είναι πλέον κενές. Μετά από αυτό, εκτελούμε τη λειτουργία main() του προγράμματος. Εδώ, ορίζουμε το μπλοκ try{} όπου η λέξη-κλειδί 'ρίξε' χρησιμοποιείται για να ρίξει την παρουσία της κλάσης 'Evaluation1()'. Αυτό αντιπροσωπεύει ότι η εξαίρεση 'Evaluation1' τίθεται εάν προκύψει εξαίρεση στο πρόγραμμα μέσα σε αυτό το μπλοκ 'δοκιμάστε'. Μετά από αυτό, έχουμε ένα μπλοκ catch{} όπου συλλαμβάνεται η εξαίρεση και εμφανίζει το μήνυμα της εξαίρεσης.

Ομοίως, έχουμε έναν ορισμό ενός άλλου μπλοκ try{} για την κλάση 'Evaluation2'. Μέσα σε αυτό το μπλοκ try{}, ρίχνουμε την παρουσία της κλάσης 'Evaluation2'. Αυτό δημιουργεί την εξαίρεση του 'Evaluation2' εάν παρουσιαστεί σφάλμα εδώ. Στη συνέχεια, καλούμε το μπλοκ catch{} για να εμφανίσουμε το μήνυμα εξαίρεσης χρησιμοποιώντας την εντολή 'cout' εάν η εξαίρεση περιλαμβάνεται σε αυτό το μπλοκ.

Οι δύο εξαιρέσεις των διαφορετικών μπλοκ 'try-catch' ρίχνονται στην κονσόλα, τις οποίες χειρίζονται οι δύο διαφορετικές κλάσεις.

Παράδειγμα 3: Πρόγραμμα για τη δημιουργία προσαρμοσμένης εξαίρεσης με το Constructor

Το πρόγραμμα χρησιμοποιεί τον κατασκευαστή για τον χειρισμό της εξαίρεσης. Παρόλο που δεν μπορούμε να λάβουμε τις τιμές από τον κατασκευαστή, μπορούμε να το επιτύχουμε χρησιμοποιώντας το μπλοκ 'try-catch'.

#include
χρησιμοποιώντας χώρο ονομάτων std ;

τάξη Δοκιμή {
ενθ val ;

δημόσιο :
Δοκιμή ( ενθ n )
{
δοκιμάστε {
αν ( n == 0 )
val = n ;
απεικόνιση ( ) ;
}

σύλληψη ( συνθ απανθρακώνω * exp ) {
cout << «Βρέθηκε εξαίρεση \n ' ;
cout << exp << endl ;
}

}

κενός απεικόνιση ( )
{
cout << 'Αξία =' << val << endl ;
}
} ;

ενθ κύριος ( )
{

Δοκιμή ( 0 ) ;
cout << «Δημιουργώντας ξανά παράδειγμα \n ' ;
Δοκιμή ( 1 ) ;
}

Στον δεδομένο κώδικα, καθιερώνουμε την κλάση «Test» όπου η μεταβλητή δηλώνεται ως «val» ακέραιου τύπου. Στη συνέχεια, έχουμε έναν ορισμό της συνάρτησης κατασκευαστή 'Test()' που περνάει με τη μεταβλητή 'n'. Στη συνέχεια, ορίζουμε το μπλοκ 'try-catch' στη συνάρτηση κατασκευής 'Test()'. Το μπλοκ try καλείται με την πρόταση if(). Εάν η τιμή του 'n' ισούται με μηδέν, το μπλοκ 'catch' θα πιάσει την εξαίρεση και το μήνυμα εξαίρεσης θα εμφανιστεί στην προτροπή. Η τιμή του 'n' αποθηκεύεται στη μεταβλητή 'val' καθώς την αρχικοποιούμε.

Μετά από αυτό, καλούμε τη συνάρτηση display() για να εμφανίσουμε την τιμή που είναι αποθηκευμένη στη μεταβλητή 'val'. Στη συνέχεια, έχουμε τον ορισμό του μπλοκ 'catch' όπου αντιμετωπίζεται η εξαίρεση που δημιουργείται από το μπλοκ 'try'. Τέλος, καλούμε τη συνάρτηση main(). Μέσα στον οποίο, καλούμε τον κατασκευαστή 'Test()'. Ο κατασκευαστής ενεργοποιείται όταν το αντικείμενο της κλάσης 'Test()' δημιουργείται και καθορίζεται με την τιμή '0' στην οποία γίνεται η εξαίρεση.

Μετά από αυτό, καλούμε ξανά την κλάση 'Test()' για να δημιουργήσουμε ένα στιγμιότυπο που περνάει με την τιμή 1. Εδώ, ο κατασκευαστής δεν θα κάνει καμία εξαίρεση αφού η τιμή δεν είναι ίση με 0. Η συνάρτηση display() θα εκτελέστε και εκτυπώστε την τιμή του 'val'.

Η προσαρμοσμένη εξαίρεση εμφανίζεται στην κονσόλα καλώντας τον κατασκευαστή. Επίσης, όταν η συνθήκη ικανοποιηθεί, ο κατασκευαστής εκτελεί χωρίς καμία εξαίρεση.

Παράδειγμα 4: Πρόγραμμα για τη δημιουργία μιας προσαρμοσμένης εξαίρεσης που ορίζεται από το χρήστη

Το πρόγραμμα εδώ χειρίζεται και συλλαμβάνει την εξαίρεση που ορίζεται από τον χρήστη όταν του ζητηθεί στην προτροπή.

#include
#include <εξαίρεση>
χρησιμοποιώντας χώρο ονομάτων std ;
τάξη MyDemo : δημόσιο εξαίρεση {
δημόσιο :
συνθ απανθρακώνω * τι ( ) συνθ βολή ( )
{
ΕΠΙΣΤΡΟΦΗ 'Εξαίρεση! Δοκίμασα τη διαίρεση με το μηδέν.! \n ' ;
}
} ;
ενθ κύριος ( )
{
δοκιμάστε
{
ενθ n1, n2 ;
cout << 'Πληκτρολογήστε τους δύο ακέραιους αριθμούς: \n ' ;
τρώει >> n1 >> n2 ;
αν ( n2 == 0 )
{
MyDemo n3 ;
βολή n3 ;
}
αλλού
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
σύλληψη ( εξαίρεση & χωρίς )
{
cout << χωρίς τι ( ) ;
}
}

Στον συγκεκριμένο κώδικα, ορίζουμε πρώτα την κλάση 'MyDemo()' που είναι η εξαρτημένη κλάση της εξαίρεσης. Μετά από αυτό, ορίζουμε τη λειτουργία του κοινού τι() με την «εικονική» λέξη-κλειδί. Η συνάρτηση what() καλείται για να πάρει την αιτία της εξαίρεσης στο πρόγραμμα όταν η συνάρτηση ρίχνει() ρίχνει την εξαίρεση. Στη συνέχεια, έχουμε μια συνάρτηση main() όπου ορίζονται τα μπλοκ try-catch{} για τον εντοπισμό και τον χειρισμό της εξαίρεσης. Μέσα στο μπλοκ try{}, δηλώνουμε δύο μεταβλητές, 'n1' και 'n2', των οποίων οι τιμές λαμβάνονται από τον χρήστη χρησιμοποιώντας την εντολή 'cin'. Όταν ληφθούν οι τιμές για κάθε μεταβλητή 'n1' και 'n2', η συνθήκη 'if' θα ελέγξει εάν η μεταβλητή 'n2' είναι ίση με 0 ή όχι. Αν ναι, γίνεται εξαίρεση ή επιστρέφονται τα αποτελέσματα της διαίρεσης. Τέλος, έχουμε ένα μπλοκ catch{} που λαμβάνει την αναφορά της κλάσης 'εξαίρεση' ως παράμετρο που κληρονομείται από αυτήν.

Η έξοδος δείχνει όταν η συνθήκη δεν πληρούται και το πρόγραμμα εκτελείται χωρίς εξαίρεση:

Επίσης, ορίζουμε την τιμή του '0' στη μεταβλητή 'n2' για να αναπαραστήσουμε τον τρόπο με τον οποίο η εξαίρεση ρίχνεται και παγιδεύεται στο πρόγραμμα.

συμπέρασμα

Συμπερασματικά, δείξαμε τη σημαντική έννοια της C++ που αποτελεί εξαίρεση. Μια εξαίρεση εμποδίζει την τακτική εκτέλεση του προγράμματος. Για αυτό, χρησιμοποιήσαμε τις λέξεις-κλειδιά 'ρίξω', 'δοκιμάζω' και 'πιάνω' για να χειριστούμε την εξαίρεση που συμβαίνει στο πρόγραμμα. Χρησιμοποιήσαμε αυτές τις λέξεις-κλειδιά στα προηγούμενα παραδείγματα για να χειριστούμε διαφορετικά την εξαίρεση.