Pengecualian Tersuai C++

Pengecualian Tersuai C



Pengecualian dalam C++ ialah konsep teras. Pengecualian berlaku pada masa pelaksanaan apabila program menghadapi ketidakkonsistenan masa jalan atau senario luar biasa. Dalam C++, istilah 'buang', 'cuba', dan 'tangkap' digunakan untuk mengendalikan atau menangkap pengecualian. Perintah 'lempar' digunakan untuk menjana pengecualian. Istilah 'cuba' berfungsi untuk membuang pengecualian, dan kata kunci 'tangkap' mewakili pengendalian pengecualian yang dibangunkan dengan istilah 'lempar' dan dilemparkan oleh bahagian 'cuba'. Mari kita selami beberapa contoh untuk menunjukkan pengecualian dalam C++.

Contoh 1: Program untuk Mencipta Kelas Pengecualian Tersuai dalam C++

Contoh mudah ini dilaksanakan untuk menunjukkan pengendalian dan pengesanan pengecualian tersuai dalam C++.

#include
#include
menggunakan ruang nama std ;

kelas DemoException : awam pengecualian
{
maya const char * apa ( ) const melontar ( )
{
kembali 'Pengecualian Tersuai Terperangkap' ;
}
} ;
int utama ( )
{
DemoException dEx ;
cubalah
{
melontar dEx ;
}
tangkap ( pengecualian & kecuali )
{
cout << kecuali. apa ( ) << endl ;
}
kembali 0 ;
}

Kami mentakrifkan fail pengepala dalam kod termasuk 'iostream' dan 'exception'. 'iostream' secara khusus dipanggil untuk aliran input dan output, manakala perpustakaan 'exception' dipanggil untuk mengendalikan pengecualian. Selepas ini, kami mencipta kelas 'DemoException' yang diperoleh daripada kelas 'exception' C++. Di sini, kami menetapkan fungsi what() maya yang digunakan untuk menyediakan const char* yang memaparkan hasil mesej ralat yang dipautkan kepada pengecualian.







Kemudian, kami menggunakan fungsi main() di mana kami mencipta objek 'dEx' kelas 'DemoException'. Selepas itu, kami mempunyai definisi blok 'cuba' yang membuang pengecualian jika ditemui. Di sini, kami membuang objek 'dEx'.



Seterusnya, kami menetapkan blok 'tangkap' untuk menangkap pengecualian dan mengendalikannya. Kami lulus rujukan pengecualian kelas sebagai parameter untuk menangkap pengecualian yang diperoleh daripadanya. Di dalam blok 'catch', kami memanggil fungsi what() pada 'except' untuk mendapatkan mesej pengecualian pada konsol.



Selepas melaksanakan program yang diberikan, mesej pengecualian tersuai ditangkap dan dilemparkan pada konsol:





Contoh 2: Program untuk Mencipta Pengecualian Tersuai Menggunakan Dua Kelas

Program ini menekankan menangani pelbagai pengecualian yang boleh dikendalikan secara bebas dengan mentakrifkan berbilang kelas.



#include
menggunakan ruang nama std ;

kelas penilaian1 { } ;
kelas penilaian2 { } ;

int utama ( ) {
cubalah {
melontar penilaian1 ( ) ;
}
tangkap ( penilaian1 e ) {
cout << 'Pengecualian Penilaian1 Ditangkap!' << endl ;
}
cubalah {
melontar penilaian2 ( ) ;
}
tangkap ( penilaian2 e ) {
cout << 'Pengecualian Penilaian 2 Ditangkap!' << endl ;
}

kembali 0 ;
}

Dalam kod yang diberikan, kami mempunyai definisi dua kelas, 'Penilaian1' dan 'Penilaian2', yang kini kosong. Selepas itu, kami menjalankan fungsi main() program. Di sini, kami menetapkan blok try{} di mana kata kunci 'lempar' digunakan untuk membuang tika kelas 'Evaluation1()'. Ini menunjukkan bahawa pengecualian 'Penilaian1' dilemparkan jika sebarang pengecualian timbul dalam program di dalam blok 'cuba' ini. Selepas itu, kami mempunyai blok tangkapan{} di mana pengecualian ditangkap dan memaparkan mesej pengecualian.

Begitu juga, kami mempunyai takrif blok percubaan{} lain untuk kelas 'Penilaian2'. Di dalam blok percubaan{} itu, kami membuang contoh kelas 'Evaluation2'. Ini membuang pengecualian 'Penilaian2' jika ralat berlaku di sini. Kemudian, kami memanggil blok tangkapan{} untuk memaparkan mesej pengecualian menggunakan arahan 'cout' jika pengecualian ditangkap dalam blok ini.

Dua pengecualian blok 'cuba-tangkap' yang berbeza dilemparkan ke dalam konsol yang dikendalikan oleh dua kelas yang berbeza.

Contoh 3: Program untuk Mencipta Pengecualian Tersuai dengan Pembina

Program ini menggunakan pembina untuk mengendalikan pengecualian. Walaupun kita tidak boleh mendapatkan nilai daripada pembina, kita boleh mencapai ini menggunakan blok 'try-catch'.

#include
menggunakan ruang nama std ;

kelas Ujian {
int val ;

awam :
Ujian ( int n )
{
cubalah {
jika ( n == 0 )
val = n ;
paparan ( ) ;
}

tangkap ( const char * exp ) {
cout << 'Pengecualian ditemui \n ' ;
cout << exp << endl ;
}

}

batal paparan ( )
{
cout << 'Nilai = ' << val << endl ;
}
} ;

int utama ( )
{

Ujian ( 0 ) ;
cout << 'Mencipta instance lagi \n ' ;
Ujian ( 1 ) ;
}

Dalam kod yang diberikan, kami menubuhkan kelas 'Ujian' di mana pembolehubah diisytiharkan sebagai 'val' jenis integer. Kemudian, kita mempunyai definisi fungsi pembina 'Test()' yang diluluskan dengan pembolehubah 'n'. Kami kemudian menetapkan blok 'try-catch' dalam fungsi pembina 'Test()'. Blok cuba dipanggil dengan pernyataan if(). Jika nilai 'n' bersamaan dengan sifar, blok 'tangkapan' akan menangkap pengecualian, dan mesej pengecualian akan dilemparkan pada gesaan. Nilai 'n' disimpan dalam pembolehubah 'val' semasa kita memulakannya.

Selepas itu, kami memanggil fungsi display() untuk menunjukkan nilai yang disimpan dalam pembolehubah 'val'. Seterusnya, kami mempunyai definisi blok 'tangkap' di mana pengecualian yang dilemparkan oleh blok 'cuba' dikendalikan. Akhirnya, kami menggunakan fungsi main(). Di dalamnya, kami memanggil pembina 'Test()'. Pembina dicetuskan apabila objek kelas 'Test()' dicipta dan ditentukan dengan nilai '0' di mana pengecualian dilemparkan.

Selepas itu, kami memanggil kelas 'Test()' sekali lagi untuk mencipta contoh yang diluluskan dengan nilai 1. Di sini, pembina tidak akan membuang sebarang pengecualian kerana nilainya tidak sama dengan 0. Fungsi display() akan laksana dan cetak nilai  “val”.

Pengecualian tersuai dilemparkan pada konsol dengan memanggil pembina. Juga, apabila keadaan berpuas hati, pembina melaksanakan tanpa sebarang pengecualian.

Contoh 4: Program untuk Mencipta Pengecualian Tersuai Ditentukan Pengguna

Program di sini mengendalikan dan menangkap pengecualian yang ditakrifkan oleh pengguna apabila ditanya dalam gesaan.

#include
#include
menggunakan ruang nama std ;
kelas MyDemo : awam pengecualian {
awam :
const char * apa ( ) const melontar ( )
{
kembali 'Pengecualian! Cuba bahagi dengan sifar.! \n ' ;
}
} ;
int utama ( )
{
cubalah
{
int n1, n2 ;
cout << 'Masukkan dua integer: \n ' ;
makan >> n1 >> n2 ;
jika ( n2 == 0 )
{
MyDemo n3 ;
melontar n3 ;
}
lain
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
tangkap ( pengecualian & exc )
{
cout << exc. apa ( ) ;
}
}

Dalam kod yang diberikan, kami mula-mula menentukan kelas 'MyDemo()' yang merupakan kelas bergantung pengecualian. Selepas itu, kami menetapkan fungsi public what() dengan kata kunci 'maya'. Fungsi what() dipanggil untuk mendapatkan punca pengecualian dalam atur cara apabila fungsi throw() membuang pengecualian. Kemudian, kami mempunyai fungsi main() di mana blok try-catch{} ditakrifkan untuk mengesan dan mengendalikan pengecualian. Dalam blok try{}, kami mengisytiharkan dua pembolehubah, 'n1' dan 'n2', yang nilainya diambil daripada pengguna menggunakan arahan 'cin'. Apabila nilai terhadap setiap pembolehubah 'n1' dan 'n2' diterima, syarat 'jika' akan menyemak sama ada pembolehubah 'n2' adalah sama dengan 0 atau tidak. Jika ya, pengecualian dilemparkan atau hasil pembahagian dikembalikan. Akhir sekali, kami mempunyai blok tangkapan{} yang mengambil rujukan kelas 'pengecualian' sebagai parameter yang diwarisi daripadanya.

Output menunjukkan apabila syarat tidak dipenuhi dan program dilaksanakan tanpa pengecualian:

Selain itu, kami mentakrifkan nilai '0' kepada pembolehubah 'n2' untuk mewakili cara pengecualian dilemparkan dan ditangkap dalam program.

Kesimpulan

Sebagai kesimpulan, kami menunjukkan konsep penting C++ yang merupakan pengecualian. Pengecualian menghalang pelaksanaan tetap program. Untuk ini, kami menggunakan kata kunci 'buang', 'cuba' dan 'tangkap' untuk mengendalikan pengecualian yang berlaku dalam program. Kami menggunakan kata kunci ini dalam contoh sebelumnya untuk mengendalikan pengecualian secara berbeza.