Program C++ mencipta pengecualian tersuai

WBOY
Lepaskan: 2023-08-26 19:53:05
ke hadapan
1044 orang telah melayarinya

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) {
   ....
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

Output

Caught exception 'Test'!
Salin selepas log masuk
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){
   ....
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

Output

Caught exception 'Test1'!
Caught exception 'Test2'!
Salin selepas log masuk

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;
}
Salin selepas log masuk

Output

Exception! String cannot be 'Hello'!
Salin selepas log masuk

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!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan