C ++ İstisna İşleme: Dene, Yakala, Atma Örneği

İçindekiler:

Anonim

C ++ 'da İstisna İşleme nedir?

C ++ 'da özel durum işleme, çalışma zamanı hataları gibi beklenmedik durumların üstesinden gelmenin bir yolunu sağlar. Bu nedenle, beklenmedik bir durum meydana geldiğinde, program denetimi, işleyiciler olarak bilinen özel işlevlere aktarılır.

İstisnaları yakalamak için, istisna incelemesine kodun bir bölümünü yerleştirirsiniz. Kod bölümü, dene-yakala bloğunun içine yerleştirilir.

Kodun bu bölümünde istisnai bir durum meydana gelirse, bir istisna atılır. Daha sonra, istisna işleyicisi programın kontrolünü devralacaktır.

İstisnai bir durumun meydana gelmemesi durumunda, kod normal şekilde çalışacaktır. İşleyiciler göz ardı edilecektir.

Bu C ++ eğitiminde şunları öğreneceksiniz:

  • C ++ 'da İstisna İşleme nedir?
  • Neden Özel Durum Yönetimi?
  • İstisna İşleme Anahtar Kelimeleri
  • Sözdizimi:
  • C ++ Standart İstisnaları
  • Kullanıcı Tanımlı İstisnalar

Neden Özel Durum Yönetimi?

Burada, C ++ 'da İstisna İşlemeyi kullanmanın nedeni verilmiştir:

  • Hata işleme kodunuzu normal kodunuzdan ayıracaksınız. Kod daha okunaklı ve bakımı daha kolay olacaktır.
  • İşlevler, seçtikleri istisnaları işleyebilir. Bir işlev birçok istisna atsa bile, yalnızca bazılarını işleyecektir. Arayan, yakalanmayan istisnaları ele alacaktır.

İstisna İşleme Anahtar Kelimeleri

C ++ 'da istisna işleme şu üç anahtar kelime etrafında döner:

  • throw - bir program bir sorunla karşılaştığında, bir istisna atar. Throw anahtar sözcüğü, programın atışı gerçekleştirmesine yardımcı olur.
  • catch - bir program bir istisnayı yakalamak için bir istisna işleyicisi kullanır. Problemi halletmeniz gereken bir programın bölümüne eklenir. Catch anahtar sözcüğü kullanılarak yapılır.
  • try - try bloğu, belirli istisnaların etkinleştirileceği kod bloğunu tanımlar. Bunu bir / daha fazla catch bloğu takip etmelidir.

Bir kod bloğunun bir istisna oluşturacağını varsayalım. İstisna, dene ve yakala anahtar sözcükleri kullanan bir yöntemle yakalanacaktır. Try / catch bloğu bir istisna atabilecek kodu çevrelemelidir. Bu tür kod, korumalı kod olarak bilinir.

Sözdizimi:

Try / catch bu sözdizimini alır:

try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
  • Bir try deyimimiz olmasına rağmen, birçok catch deyimimiz olabilir.
  • ExceptionName, yakalanacak istisnanın adıdır.
  • İstisna1, istisna2 ve istisnaN istisnalara atıfta bulunmak için tanımlı adlarınızdır.

Örnek 1:

#include#includeusing namespace std;int main() {vector vec;vec.push_back(0);vec.push_back(1);// access the third element, which doesn't existtry{vec.at(2);}catch (exception& ex){cout << "Exception occurred!" << endl;}return 0;}

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için programa iostream başlık dosyasını dahil edin.
  2. Fonksiyonlarını kullanmak için vektör başlık dosyasını programa dahil edin.
  3. Programdaki std ad alanını çağırmadan sınıflarına dahil edin.
  4. Main () işlevini çağırın. Program mantığı kendi bünyesine eklenmelidir.
  5. Tamsayı verilerini depolamak için vec adlı bir vektör oluşturun.
  6. 0 öğesini vec adlı vektöre ekleyin.
  7. 1 öğesini vec adlı vektöre ekleyin.
  8. Bir yorum. C ++ derleyicisi tarafından atlanacaktır.
  9. Bir istisna yakalamak için try deyimini kullanın. {, Dene / yakala bloğunun gövdesinin başlangıcını gösterir. Gövde içine eklenen kod, korumalı kod haline gelecektir.
  10. Vec adlı vektörün 2. dizininde (üçüncü öğe) depolanan öğeye erişmeye çalışın. Bu öğe mevcut değil.
  11. Try / catch bloğunun gövdesinin sonu.
  12. İstisnayı yakalayın. Döndürülen hata mesajı, örn. Değişkende saklanacaktır.
  13. İstisna yakalanırsa konsolda bir mesaj yazdırın.
  14. Yakalama bloğunun gövdesinin sonu.
  15. Program başarılı bir şekilde çalıştırıldığında bir değer döndürmelidir.
  16. Main () işlev gövdesinin sonu.

Örnek 2:

#include using namespace std;double zeroDivision(int x, int y) {if (y == 0) {throw "Division by Zero!";}return (x / y);}int main() {int a = 11;int b = 0;double c = 0;try {c = zeroDivision(a, b);cout << c << endl;}catch (const char* message) {cerr << message << endl;}return 0;}

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için programa iostream başlık dosyasını dahil edin.
  2. Programdaki std ad alanını çağırmadan sınıflarına dahil edin.
  3. İki tamsayı argümanı, x ve y alan zeroDivision adlı bir işlev oluşturun. İşlev, çift sonuç döndürmelidir.
  4. Y değişkeninin değerinin 0 olup olmadığını kontrol etmek için bir if ifadesi kullanın. {, İf body öğesinin başlangıcını işaretler.
  5. Y 0 ise döndürülecek / atılacak mesaj.
  6. İf ifadesinin gövdesinin sonu.
  7. ZeroDivision işlevi, x / y değerini döndürmelidir.
  8. ZeroDivision işlevinin gövdesinin sonu.
  9. Main () yöntemini çağırın. {, Bu yöntemin başlangıcını işaret eder.
  10. Bir tamsayı değişkeni bildirin ve ona değeri atayın 11.
  11. Bir tamsayı değişkeni b bildirin ve ona 0 değerini atayın.
  12. Bir çift değişken c bildirin ve ona 0 değerini atayın.
  13. Bir istisna yakalamak için try deyimini kullanın. {, Dene / yakala bloğunun gövdesinin başlangıcını gösterir. Gövde içine eklenen kod, korumalı kod haline gelecektir.
  14. ZeroDivision işlevini çağırın ve a ve b bağımsız değişkenlerine, yani 11 ve 0'a geçin. Bu işlemin sonucu c değişkeninde saklanacaktır.
  15. Konsolda c değişkeninin değerini yazdırın.
  16. Try / catch bloğunun gövdesinin sonu.
  17. İstisnayı yakalayın. Döndürülen hata mesajı değişken mesajda saklanacaktır.
  18. Konsolda döndürülen hata mesajını yazdırın.
  19. Yakalama bloğunun gövdesinin sonu.
  20. Program başarılı bir şekilde çalıştırıldığında bir değer döndürmelidir.
  21. Main () işlev gövdesinin sonu.

C ++ Standart İstisnaları

C ++, sınıfında tanımlanan standart istisnaların bir listesiyle birlikte gelir. Bunlar aşağıda açıklanmıştır:

İstisna Açıklama
std :: istisna Bu bir istisnadır ve tüm standart C ++ istisnalarının ana sınıfıdır.
std :: bad_alloc Bu istisna, yeni bir anahtar kelime tarafından atılır.
std :: bad_cast Bu, dynamic_cast tarafından atılan bir istisnadır.
std :: bad_exception C ++ programlarında beklenmeyen istisnaları işlemek için kullanışlı bir cihaz.
std :: bad_typeid Typeid tarafından atılan bir istisna.
std :: logic_error Bu istisna teorik olarak kod okunarak tespit edilebilir.
std :: domain_error Bu, matematiksel olarak geçersiz bir alan adı kullanıldıktan sonra atılan bir istisnadır.
std :: invalid_argument Geçersiz bağımsız değişkenlerin kullanılması nedeniyle atılan bir istisna.
std :: length_error Büyük bir std :: string oluşturulduktan sonra atılan bir istisna.
std :: out_of_range At yöntemi ile atılır.
std :: runtime_error Bu, kod okunarak tespit edilemeyen bir istisnadır.
std :: overflow_error Bu istisna, matematiksel bir taşmanın meydana gelmesinden sonra atılır.
std :: range_error Aralık dışı bir değeri kaydetmeye çalıştığınızda bu istisna atılır.
std :: underflow_error Matematiksel alt akış oluştuktan sonra ortaya çıkan bir istisna.

Kullanıcı Tanımlı İstisnalar

C ++ std :: exception sınıfı, istisna olarak atılabilecek nesneleri tanımlamamıza izin verir. Bu sınıf, başlığında tanımlanmıştır. Sınıf bize what adında bir sanal üye işlevi sağlar.

Bu işlev, char * türünde boş sonlu bir karakter dizisi döndürür. Bir istisna tanımına sahip olmak için türetilmiş sınıflarda bunun üzerine yazabiliriz.

Misal:

#include #include using namespace std;class newException : public exception{virtual const char* what() const throw(){return "newException occurred";}} newex;int main() {try {throw newex;}catch (exception& ex) {cout << ex.what() << '\n';}return 0;}

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. Programımıza iostream başlık dosyasını ekleyin. Fonksiyonlarını hata almadan kullanacağız.
  2. İstisna başlık dosyasını programımıza ekleyin. Hatasız ne gibi işlevlerini kullanacağız.
  3. Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
  4. NewException adlı yeni bir sınıf oluşturun. Bu sınıf, C ++ 'ın istisna sınıfını miras alır.
  5. Sınıf gövdesinin başlangıcı.
  6. İstisna başlık dosyasında () tanımlı olan sanal üye işlevinin üzerine yazın. Daha sonra kendi istisnamızı, yeni istisnayı tanımlayacağız.
  7. Yeni istisnanın tanımına başlayın.
  8. Yeni istisna yakalanırsa döndürülecek mesaj.
  9. Yeni istisna tanımının sonu.
  10. NewException sınıfının gövdesinin sonu. Newex, yeni istisnamızı yakalamak için kullanılacak isimdir, bundan sonra newException çağrılacaktır.
  11. Main () işlevini çağırın. Program mantığı kendi bünyesine eklenmelidir. {, Vücudunun başlangıcını gösterir.
  12. İstisnayı işaretlememiz gereken kodu işaretlemek için bir try deyimi kullanın. {, Dene / yakala bloğunun gövdesinin başlangıcını gösterir. Bununla çevrili kod korunacaktır.
  13. Yakalanırsa newex istisnasını atın.
  14. Deneme gövdesinin sonu.
  15. İstisnayı yakalamak için catch deyimini kullanın. İstisna hata mesajı, ex değişkeninde saklanacaktır.
  16. Konsolda istisna hata mesajını yazdırın.
  17. Catch ifadesinin gövdesinin sonu.
  18. Program başarılı bir şekilde yürütülürse bir değer döndürmelidir.
  19. Main () işlevinin gövdesinin sonu.

Özet:

  • C ++ 'da istisna işleme ile çalışma zamanı hatalarını işleyebilirsiniz.
  • Çalışma zamanı hataları, programın yürütülmesi sırasında oluşan hatalardır.
  • İstisna işleme, programınızdaki beklenmedik durumların üstesinden gelmenize yardımcı olur.
  • Beklenmeyen bir durum oluştuğunda, program denetimi işleyicilere aktarılır.
  • Bir istisna yakalamak için, try-catch bloğunun altına bir kod bölümü yerleştirirsiniz.
  • Throw anahtar sözcüğü programın istisnalar atmasına yardımcı olarak programın sorunu çözmesine yardımcı olur.
  • Try anahtar sözcüğü, belirli istisnaların etkinleştirileceği kod bloğunu tanımlamaya yardımcı olur.
  • İstisnalarımızı tanımlamak için istisna başlık dosyasındaki what () fonksiyonunun üzerine yazabiliriz.