C++ mekanisme pengendalian pengecualian dan contoh kod
Mekanisme pengendalian pengecualian C++ dan contoh kod
Dalam pengaturcaraan C++, mekanisme pengendalian pengecualian ialah konsep yang sangat penting, yang boleh membantu kami menangani ralat masa jalan dan situasi yang tidak dijangka, menjadikan program lebih mantap dan boleh dipercayai. Artikel ini akan memperkenalkan mekanisme pengendalian pengecualian dalam C++, termasuk definisi pengecualian, melontar pengecualian, menangkap pengecualian, pengendali pengecualian, dll., dan menyediakan beberapa contoh kod untuk membantu pembaca memahami dan menggunakan dengan lebih baik.
1. Definisi pengecualian
Semasa pelaksanaan biasa program, jika beberapa ralat yang tidak dapat dikendalikan atau situasi yang tidak dijangka ditemui, pengecualian akan berlaku. Pengecualian boleh difahami sebagai mekanisme perlindungan untuk program, yang boleh memberikan maklumat ralat dan keluar dari program dengan anggun apabila ralat berlaku dalam program untuk memastikan keselamatan dan kebolehpercayaan program.
C++ mentakrifkan beberapa kelas pengecualian standard, yang mewakili pelbagai jenis pengecualian, seperti: std::exception, std::bad_alloc, std::runtime_error, dsb. Kami juga boleh menyesuaikan kelas pengecualian untuk mewakili pengecualian tertentu.
2. Throw exception
Apabila pengecualian berlaku dalam program, anda boleh menggunakan kata kunci lontaran untuk membuang pengecualian dan menyerahkan objek pengecualian kepada pengendali pengecualian. Biasanya, sintaks untuk melontar pengecualian adalah seperti berikut:
throw exceptionType(argument);
Antaranya, exceptionType ialah jenis kelas pengecualian, dan argumen ialah parameter objek pengecualian, yang boleh menjadi sebarang jenis data.
Berikut ialah contoh kod ringkas yang menunjukkan cara membuang kelas pengecualian standard std::runtime_error dan menghantar mesej ralat sebagai parameter:
#include <iostream> #include <stdexcept> void division(int a, int b){ if (b == 0){ throw std::runtime_error("Division by zero"); } std::cout << "Result: " << a/b << std::endl; } int main(){ try{ division(10, 0); } catch(std::exception& e){ std::cout << "Exception caught: " << e.what() << std::endl; } return 0; }
Dalam kod di atas, apabila pembahagi ialah 0, atur cara akan membuang std ::runtime_errorException dan hantar rentetan mesej ralat sebagai parameter. Dalam fungsi utama, kami menggunakan pernyataan cuba-tangkap untuk menangkap pengecualian ini dan mencetak mesej ralat pengecualian.
3. Tangkap pengecualian
Apabila program melemparkan pengecualian, kita perlu menangkap dan mengendalikan pengecualian untuk mengelakkan ranap program. Pengecualian boleh ditangkap menggunakan pernyataan cuba-tangkap, sintaksnya adalah seperti berikut:
try{ // 可能抛出异常的代码 } catch(exceptionType1& e1){ // 处理类型为exceptionType1的异常 } catch(exceptionType2& e2){ // 处理类型为exceptionType2的异常 } catch(...){ // 处理所有类型的异常 }
Dalam blok pernyataan cuba, kita boleh memasukkan kod yang mungkin membuang pengecualian. Apabila program melemparkan pengecualian, ia akan melompat keluar dari blok pernyataan cuba dan memasuki blok pernyataan tangkapan yang sepadan untuk diproses berdasarkan padanan jenis pengecualian dan pernyataan tangkapan. Pernyataan tangkapan terakhir, catch(...), boleh mengendalikan semua jenis pengecualian, tetapi penggunaannya tidak disyorkan kerana ia akan kehilangan maklumat tentang objek pengecualian dan menyusahkan untuk penyahpepijatan dan penyelenggaraan program.
Berikut ialah contoh kod ringkas yang menunjukkan cara menangkap pengecualian std::runtime_error dan mengendalikannya:
#include <iostream> #include <stdexcept> void division(int a, int b){ if (b == 0){ throw std::runtime_error("Division by zero"); } std::cout << "Result: " << a/b << std::endl; } int main(){ try{ division(10, 0); } catch(std::runtime_error& e){ std::cout << "Exception caught: " << e.what() << std::endl; } return 0; }
Dalam kod di atas, apabila pembahagi ialah 0, atur cara membuang pengecualian std::runtime_error. Dalam fungsi utama, kami menggunakan pernyataan cuba-tangkap untuk menangkap pengecualian ini dan mencetak mesej ralat pengecualian.
4. Pengendali pengecualian
Selain pernyataan cuba-tangkap, C++ juga menyediakan mekanisme khas untuk mengendalikan pengecualian yang tidak ditangkap, dipanggil pengendali pengecualian. Anda boleh menggunakan fungsi std::set_terminate() untuk mendaftarkan pengendali pengecualian dan melaksanakan kod pengendali apabila pengecualian yang tidak ditangkap berlaku dalam program. Pengendali pengecualian biasanya digunakan untuk menangani ralat yang serius, seperti memori tidak mencukupi, ralat membaca dan menulis fail, dsb.
Berikut ialah contoh kod ringkas yang menunjukkan cara mendaftar dan menggunakan pengendali pengecualian:
#include <iostream> #include <cstdlib> void myExceptionHandler(){ std::cout << "Unhandled exception" << std::endl; std::exit(1); } int main(){ std::set_terminate(myExceptionHandler); int* p = new int[1000000000]; delete[] p; return 0; }
Dalam kod di atas, kami menggunakan fungsi std::set_terminate() untuk mendaftar pengendali pengecualian myExceptionHandler, dan dalam fungsi utama Peruntukkan blok memori yang besar. Oleh kerana ingatan tidak mencukupi, program akan membuang pengecualian std::bad_alloc Pengecualian ini akan ditangkap oleh pemproses myExceptionHandler, mencetak mesej ralat dan keluar dari program.
Ringkasan
Mekanisme pengendalian pengecualian C++ ialah bahagian yang sangat penting dalam program ini boleh membantu kami menangani ralat masa jalan dan situasi yang tidak dijangka, menjadikan program lebih mantap dan boleh dipercayai. Artikel ini memperkenalkan definisi pengecualian, melontar pengecualian, menangkap pengecualian, pengendali pengecualian, dsb. dalam C++, dan menyediakan beberapa contoh kod untuk membantu pembaca memahami dan menerapkannya dengan lebih baik. Dalam pengaturcaraan sebenar, kita harus menggunakan mekanisme pengendalian pengecualian secara munasabah dan mengelakkan penyalahgunaan dan penyalahgunaan untuk memastikan kecekapan dan kebolehselenggaraan program.
Atas ialah kandungan terperinci C++ mekanisme pengendalian pengecualian dan contoh kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Susun atur objek C++ dan penjajaran memori mengoptimumkan kecekapan penggunaan memori: Susun atur objek: ahli data disimpan dalam susunan pengisytiharan, mengoptimumkan penggunaan ruang. Penjajaran memori: Data diselaraskan dalam memori untuk meningkatkan kelajuan akses. Kata kunci alignas menentukan penjajaran tersuai, seperti struktur CacheLine yang dijajarkan 64 bait, untuk meningkatkan kecekapan akses talian cache.

Langkah-langkah untuk melaksanakan corak strategi dalam C++ adalah seperti berikut: tentukan antara muka strategi dan isytiharkan kaedah yang perlu dilaksanakan. Buat kelas strategi khusus, laksanakan antara muka masing-masing dan sediakan algoritma yang berbeza. Gunakan kelas konteks untuk memegang rujukan kepada kelas strategi konkrit dan melaksanakan operasi melaluinya.

Golang dan C++ masing-masing adalah sampah yang dikumpul dan bahasa pengaturcaraan pengurusan memori manual, dengan sistem sintaks dan jenis yang berbeza. Golang melaksanakan pengaturcaraan serentak melalui Goroutine, dan C++ melaksanakannya melalui benang. Pengurusan memori Golang adalah mudah, dan C++ mempunyai prestasi yang lebih kukuh. Dalam kes praktikal, kod Golang adalah lebih ringkas dan C++ mempunyai kelebihan prestasi yang jelas.

Penunjuk pintar C++ melaksanakan pengurusan memori automatik melalui pengiraan penunjuk, pemusnah dan jadual fungsi maya. Kiraan penunjuk menjejaki bilangan rujukan, dan apabila bilangan rujukan menurun kepada 0, pemusnah mengeluarkan penunjuk asal. Jadual fungsi maya membolehkan polimorfisme, membenarkan gelagat khusus dilaksanakan untuk pelbagai jenis penunjuk pintar.

Pengendalian pengecualian bersarang dilaksanakan dalam C++ melalui blok try-catch bersarang, membenarkan pengecualian baharu dibangkitkan dalam pengendali pengecualian. Langkah-langkah cuba-tangkap bersarang adalah seperti berikut: 1. Blok cuba-tangkap luar mengendalikan semua pengecualian, termasuk yang dilemparkan oleh pengendali pengecualian dalam. 2. Blok cuba-tangkap dalam mengendalikan jenis pengecualian tertentu, dan jika pengecualian luar skop berlaku, kawalan diberikan kepada pengendali pengecualian luaran.

Untuk lelaran ke atas bekas STL, anda boleh menggunakan fungsi begin() dan end() bekas untuk mendapatkan julat lelaran: Vektor: Gunakan gelung for untuk lelaran ke atas julat lelaran. Senarai terpaut: Gunakan fungsi ahli seterusnya() untuk melintasi elemen senarai terpaut. Pemetaan: Dapatkan iterator nilai kunci dan gunakan gelung for untuk melintasinya.

Bagaimana untuk menyalin fail dalam C++? Gunakan strim std::ifstream dan std::ofstream untuk membaca fail sumber, menulis ke fail destinasi dan menutup strim. 1. Cipta aliran baharu fail sumber dan destinasi. 2. Semak sama ada strim berjaya dibuka. 3. Salin blok data fail demi blok dan tutup strim untuk mengeluarkan sumber.

Warisan templat C++ membenarkan kelas terbitan templat menggunakan semula kod dan kefungsian templat kelas asas, yang sesuai untuk mencipta kelas dengan logik teras yang sama tetapi gelagat khusus yang berbeza. Sintaks warisan templat ialah: templateclassDerived:publicBase{}. Contoh: templateclassBase{};templateclassDerived:publicBase{};. Kes praktikal: Mencipta kelas terbitan Derived, mewarisi fungsi mengira Base kelas asas, dan menambah kaedah printCount untuk mencetak kiraan semasa.
