Rumah >pembangunan bahagian belakang >C++ >Program C++ mencipta pengecualian tersuai

Program C++ mencipta pengecualian tersuai

WBOY
WBOYke hadapan
2023-08-26 19:53:051081semak imbas

Program C++ mencipta pengecualian tersuai

Pengecualian ialah konsep teras C++. Pengecualian berlaku apabila operasi yang tidak diingini atau mustahil berlaku semasa pelaksanaan. Mengendalikan operasi yang tidak diingini atau mustahil ini dalam C++ dipanggil pengendalian pengecualian. Pengendalian pengecualian terutamanya menggunakan tiga kata kunci khusus, iaitu 'cuba', 'tangkap' dan 'buang'. Kata kunci ‘try’ digunakan untuk melaksanakan kod yang mungkin menghadapi pengecualian, kata kunci ‘catch’ digunakan untuk mengendalikan pengecualian ini dan kata kunci ‘lempar’ digunakan untuk membuat pengecualian. Pengecualian dalam C++ boleh dibahagikan kepada dua jenis, iaitu pengecualian STL dan pengecualian yang ditentukan pengguna. Dalam artikel ini, kami memberi tumpuan kepada cara membuat pengecualian tersuai ini. Butiran lanjut mengenai pengendalian pengecualian boleh didapati di sini.

Buat pengecualian tersuai menggunakan satu kelas

Pertama, kami melihat cara membuat pengecualian tersuai menggunakan satu kelas. Untuk melakukan ini, kita perlu menentukan kelas dan membuang pengecualian dari kelas itu.

Tatabahasa

//user-defined class
class Test{};
try{
   //throw object of that class
   throw Test();
}
catch(Test t) {
   ....
}

Contoh

diterjemahkan sebagai:

Contoh

#include <iostream>
using namespace std;

//define a class
class Test{};

int main() {
   try{
      //throw object of that class
      throw Test();
   }
   catch(Test t) {
      cout << "Caught exception 'Test'!" << endl;
   }

   return 0;
}

Output

Caught exception 'Test'!
Blok

‘cuba’ akan membuang pengecualian kelas itu, manakala blok ‘catch’ hanya akan menangkap pengecualian kelas tertentu itu. Jika terdapat dua kelas pengecualian yang ditentukan pengguna, ia mesti dikendalikan secara berasingan.

Buat pengecualian tersuai menggunakan berbilang kelas

Prosesnya mudah, seperti yang dijangkakan, jika terdapat beberapa pengecualian, setiap satu mesti dikendalikan secara individu.

Tatabahasa

//user-defined class
class Test1{};
class Test2{};
try{
   //throw object of the first class
   throw Test1();
}
catch(Test1 t){
   ....
}
try{
   //throw object of the second class
   throw Test2();
}
catch(Test2 t){
   ....
}

Contoh

diterjemahkan sebagai:

Contoh

#include <iostream>
using namespace std;

//define multiple classes
class Test1{};
class Test2{};

int main() {
   try{
      //throw objects of multiple classes
      throw Test1();
   }
   catch(Test1 t) {
      cout << "Caught exception 'Test1'!" << endl;
   }
   try{
      throw Test2();
   }
   catch(Test2 t) {
      cout << "Caught exception 'Test2'!" << endl;
   }

   return 0;
}

Output

Caught exception 'Test1'!
Caught exception 'Test2'!

Kami terpaksa menggunakan dua blok cuba-tangkap yang berbeza untuk mengendalikan dua kategori pengecualian yang berbeza. Sekarang mari kita lihat sama ada kita boleh mencipta dan mengendalikan pengecualian menggunakan pembina.

Buat pengecualian tersuai menggunakan pembina

Kami boleh menggunakan pembina kelas untuk membuat pengecualian tersuai. Dalam contoh di bawah, kita dapat melihat bahawa balingan dan pengendalian pengecualian diuruskan di dalam pembina kelas.

Contoh

diterjemahkan sebagai:

Contoh

#include <iostream>
using namespace std;

//define a class
class Test1{
   string str;
   public:
      //try-catch in the constructor
      Test1(string str){
         try{
            if (str == "Hello"){
               throw "Exception! String cannot be 'Hello'!";
            }
            this->str = str;   
         }
         catch(const char* s) {
            cout << s << endl;
         }
      }
};

int main() {
   Test1 t("Hello");
   return 0;
}

Output

Exception! String cannot be 'Hello'!

Pengendalian pengecualian adalah salah satu ciri terpenting yang disediakan oleh C++. Kita boleh mewarisi kelas pengecualian C++ dan menggunakannya untuk melaksanakan pengendalian pengecualian, tetapi ini hanyalah amalan yang baik dan tidak diperlukan untuk mencipta pengecualian tersuai. Faedah mewarisi kelas pengecualian C++ ialah jika terdapat pernyataan tangkapan biasa yang menangkap std::exception, ia boleh mengendalikan sebarang pengecualian yang ditentukan pengguna tanpa perlu mengetahui butiran khusus. Perlu diingatkan bahawa pernyataan 'lempar' hanya berfungsi dalam blok 'cuba', jika tidak, ia tidak akan berfungsi. Pernyataan 'tangkap' hanya boleh mengendalikan pengecualian yang dilemparkan oleh kelas yang ditentukan pengguna atau kelas STL tertentu.

Atas ialah kandungan terperinci Program C++ mencipta pengecualian tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam

Artikel berkaitan

Lihat lagi