Pengecualian Khusus C++

Pengecualian Khusus C



Pengecualian dalam C++ adalah konsep inti. Pengecualian terjadi pada waktu eksekusi ketika program mengalami inkonsistensi waktu proses atau skenario yang tidak biasa. Dalam C++, istilah “throw”, “try”, dan “catch” digunakan untuk menangani atau menangkap pengecualian. Perintah 'lempar' digunakan untuk menghasilkan pengecualian. Istilah “coba” berfungsi untuk melempar pengecualian, dan kata kunci “tangkap” mewakili penanganan pengecualian yang dikembangkan dengan istilah “melempar” dan dilemparkan oleh bagian “coba”. Mari selami beberapa contoh untuk mendemonstrasikan pengecualian di C++.

Contoh 1: Program untuk Membuat Kelas Pengecualian Kustom di C++

Contoh sederhana ini diimplementasikan untuk mendemonstrasikan penanganan dan deteksi pengecualian khusus di C++.

#termasuk
#termasuk
menggunakan ruang nama std ;

kelas Pengecualian Demo : publik pengecualian
{
maya konstanta arang * Apa ( ) konstanta melemparkan ( )
{
kembali 'Tertangkap Pengecualian Khusus' ;
}
} ;
ke dalam utama ( )
{
DemoException dEx ;
mencoba
{
melemparkan dEx ;
}
menangkap ( pengecualian & kecuali )
{
cout << kecuali. Apa ( ) << akhir ;
}
kembali 0 ;
}

Kami mendefinisikan file header dalam kode termasuk “iostream” dan “pengecualian”. 'iostream' secara khusus dipanggil untuk aliran input dan output, sedangkan perpustakaan 'pengecualian' dipanggil untuk menangani pengecualian. Setelah ini, kita membuat kelas “DemoException” yang berasal dari kelas “pengecualian” C++. Di sini, kita mengatur fungsi virtual what() yang digunakan untuk menyediakan const char* yang menampilkan hasil pesan kesalahan yang ditautkan ke pengecualian.







Kemudian, kita memanggil fungsi main() tempat kita membuat objek “dEx” dari kelas “DemoException”. Setelah itu, kita memiliki definisi blok “coba” yang memunculkan pengecualian jika ditemui. Di sini, kita melempar objek “dEx”.



Selanjutnya, kita menyetel blok “catch” untuk menangkap pengecualian dan menanganinya. Kami meneruskan referensi pengecualian kelas sebagai parameter untuk menangkap pengecualian yang diturunkan darinya. Di dalam blok “catch”, kita memanggil fungsi what() pada “kecuali” untuk mendapatkan pesan pengecualian di konsol.



Setelah menjalankan program yang diberikan, pesan pengecualian khusus ditangkap dan dilemparkan ke konsol:





Contoh 2: Program untuk Membuat Pengecualian Kustom Menggunakan Dua Kelas

Program ini menekankan penanganan beberapa pengecualian yang dapat ditangani secara independen dengan mendefinisikan beberapa kelas.



#termasuk
menggunakan ruang nama std ;

kelas evaluasi1 { } ;
kelas evaluasi2 { } ;

ke dalam utama ( ) {
mencoba {
melemparkan evaluasi1 ( ) ;
}
menangkap ( evaluasi1 e ) {
cout << 'Evaluasi1 pengecualian Tertangkap!' << akhir ;
}
mencoba {
melemparkan evaluasi2 ( ) ;
}
menangkap ( evaluasi2 e ) {
cout << 'Evaluasi 2 pengecualian Tertangkap!' << akhir ;
}

kembali 0 ;
}

Dalam kode yang diberikan, kita memiliki definisi dua kelas, “Evaluation1” dan “Evaluation2”, yang sekarang kosong. Setelah itu, kita menjalankan fungsi main() program. Di sini, kita menyetel blok try{} di mana kata kunci “throw” digunakan untuk membuang instance kelas “Evaluation1()”. Ini menunjukkan bahwa pengecualian “Evaluation1” dilempar jika ada pengecualian yang muncul dalam program di dalam blok “coba” ini. Setelah itu, kita memiliki blok catch{} di mana pengecualian ditangkap dan menampilkan pesan pengecualian tersebut.

Demikian pula, kita memiliki definisi blok try{} lain untuk kelas “Evaluation2”. Di dalam blok try{} tersebut, kita membuang instance kelas “Evaluation2”. Ini memunculkan pengecualian 'Evaluation2' jika terjadi kesalahan di sini. Lalu, kita memanggil blok catch{} untuk menampilkan pesan pengecualian menggunakan perintah “cout” jika pengecualian tertangkap dalam blok ini.

Dua pengecualian dari blok “coba-tangkap” yang berbeda dilemparkan ke konsol yang ditangani oleh dua kelas berbeda.

Contoh 3: Program untuk Membuat Pengecualian Kustom dengan Konstruktor

Program ini menggunakan konstruktor untuk menangani pengecualian. Meskipun kita tidak bisa mendapatkan nilai dari konstruktor, kita dapat mencapainya dengan menggunakan blok “try-catch”.

#termasuk
menggunakan ruang nama std ;

kelas Tes {
ke dalam val ;

publik :
Tes ( ke dalam N )
{
mencoba {
jika ( N == 0 )
val = N ;
menampilkan ( ) ;
}

menangkap ( konstanta arang * pengalaman ) {
cout << 'Pengecualian ditemukan \N ' ;
cout << pengalaman << akhir ;
}

}

ruang kosong menampilkan ( )
{
cout << 'Nilai =' << val << akhir ;
}
} ;

ke dalam utama ( )
{

Tes ( 0 ) ;
cout << 'Membuat instance lagi \N ' ;
Tes ( 1 ) ;
}

Dalam kode yang diberikan, kita membuat kelas “Test” di mana variabelnya dideklarasikan sebagai “val” bertipe integer. Kemudian, kita memiliki definisi fungsi konstruktor “Test()” yang diteruskan dengan variabel “n”. Kami kemudian menyetel blok “coba-tangkap” di dalam fungsi konstruktor “Test()”. Blok try dipanggil dengan pernyataan if(). Jika nilai “n” sama dengan nol, blok “catch” akan menangkap pengecualian, dan pesan pengecualian akan ditampilkan pada prompt. Nilai “n” disimpan dalam variabel “val” saat kita menginisialisasinya.

Setelah itu, kita memanggil fungsi display() untuk menampilkan nilai yang disimpan dalam variabel “val”. Selanjutnya, kita memiliki definisi blok “catch” dimana pengecualian yang dilemparkan oleh blok “try” ditangani. Terakhir, kita memanggil fungsi main(). Di dalamnya, kita memanggil konstruktor “Test()”. Konstruktor dipicu ketika objek kelas “Test()” dibuat dan ditentukan dengan nilai “0” di mana pengecualian dilemparkan.

Setelah itu, kita memanggil kelas “Test()” lagi untuk membuat instance yang diteruskan dengan nilai 1. Di sini, konstruktor tidak akan memunculkan pengecualian apa pun karena nilainya tidak sama dengan 0. Fungsi display() akan jalankan dan cetak nilai  “val”.

Pengecualian khusus dilemparkan ke konsol dengan memanggil konstruktor. Selain itu, ketika kondisi terpenuhi, konstruktor akan mengeksekusi tanpa pengecualian apa pun.

Contoh 4: Program untuk Membuat Pengecualian Kustom Buatan Pengguna

Program di sini menangani dan menangkap pengecualian yang ditentukan oleh pengguna ketika ditanya di prompt.

#termasuk
#termasuk
menggunakan ruang nama std ;
kelas Demo Saya : publik pengecualian {
publik :
konstanta arang * Apa ( ) konstanta melemparkan ( )
{
kembali 'Pengecualian! Mencoba membagi dengan nol.! \N ' ;
}
} ;
ke dalam utama ( )
{
mencoba
{
ke dalam n1, n2 ;
cout << 'Masukkan dua bilangan bulat : \N ' ;
makan >> n1 >> n2 ;
jika ( n2 == 0 )
{
Demo Saya n3 ;
melemparkan n3 ;
}
kalau tidak
{
cout << 'n1/n2 = ' << n1 / n2 << akhir ;
}
}
menangkap ( pengecualian & kecuali )
{
cout << kecuali. Apa ( ) ;
}
}

Dalam kode yang diberikan, pertama-tama kita mendefinisikan kelas “MyDemo()” yang merupakan kelas dependen dari pengecualian. Setelah itu, kita atur fungsi public what() dengan kata kunci “virtual”. Fungsi what() dipanggil untuk mengetahui penyebab pengecualian dalam program ketika fungsi throw() memunculkan pengecualian. Kemudian, kita memiliki fungsi main() yang mana blok try-catch{} didefinisikan untuk mendeteksi dan menangani pengecualian. Dalam blok try{}, kita mendeklarasikan dua variabel, “n1” dan “n2”, yang nilainya diambil dari pengguna menggunakan perintah “cin”. Ketika nilai terhadap masing-masing variabel “n1” dan “n2” diterima, kondisi “if” akan memeriksa apakah variabel “n2” sama dengan 0 atau tidak. Jika demikian, pengecualian akan dilempar atau hasil pembagian dikembalikan. Terakhir, kita memiliki blok catch{} yang mengambil referensi kelas “pengecualian” sebagai parameter yang diwarisi darinya.

Outputnya menunjukkan ketika kondisi tidak terpenuhi dan program dijalankan tanpa kecuali:

Selain itu, kami mendefinisikan nilai “0” pada variabel “n2” untuk mewakili bagaimana pengecualian dilemparkan dan ditangkap dalam program.

Kesimpulan

Sebagai kesimpulan, kami mendemonstrasikan konsep penting C++ yang merupakan pengecualian. Pengecualian menghambat pelaksanaan rutin program. Untuk ini, kami menggunakan kata kunci “throw”, “try”, dan “catch” untuk menangani pengecualian yang terjadi dalam program. Kami menggunakan kata kunci ini pada contoh sebelumnya untuk menangani pengecualian secara berbeda.