C++ İstisna İşleme: Dene, Yakala, At Örnek

⚡ Akıllı Özet

İstisna yönetimi C++ Bu, bir programın çalışma zamanı hatalarını tespit etmesini ve bunlara yanıt vermesini sağlayan try, catch ve throw yapılarını kullanarak çökmesini önlemeyi amaçlar. Burada anahtar kelimeleri, sözdizimini, standart istisnaları ve kullanıcı tanımlı istisnaları örneklerle öğreneceksiniz.

  • ⚠️ Ne olduğunu: Hata yönetimi, çalışma zamanı hatalarını yakalayarak programın toparlanmasını sağlar.
  • 🔑 Anahtar Kelimeler: Kodları test etmek için `try`, hata fırlatmak için `throw` ve hataları yakalamak için `catch` yapılarını kullanır.
  • 🧾 Sözdizimi: Riskli kodları try bloğuna, hataları ise catch bloklarına yerleştirin.
  • 📚 Standart istisnalar: C++ İstisna başlığında yerleşik istisnalar sunar.
  • 🤖 Yapay zekâ yardımı: GitHub Copilot gibi yapay zeka araçları, try-catch blokları ve hata yönetimi ekler.

C++ İstisna işleme

İstisna İşleme Nedir? C++?

İstisna yönetimi C++ çalışma zamanı hataları gibi beklenmedik durumlarla başa çıkmanın bir yolunu sunar. Yani beklenmeyen bir durum oluştuğunda program kontrolü, işleyiciler olarak bilinen özel işlevlere aktarılır.

İstisnaları yakalamak için kodun bir bölümünü istisna incelemesine tabi tutarsınız. Kodun bölümü try-catch 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 ortaya çıkmaması durumunda kod normal şekilde çalışacaktır. İşleyiciler göz ardı edilecek.

Bu C++ öğretici, şunları öğreneceksiniz:

Neden İstisna İşleme?

İşte İstisna İşleme'yi kullanmanın nedeni C++:

  • Hata işleme kodunuzu normal kodunuzdan ayıracaksınız. Kod daha okunabilir 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ı ele alır. Arayan, yakalanmamış istisnaları ele alacaktır.

İstisna İşleme Anahtar Kelimeleri

İstisna yönetimi C++ şu üç anahtar kelime etrafında dönmektedir:

  • atmak– Bir program bir sorunla karşılaştığında bir istisna atar. Throw anahtar sözcüğü programın fırlatmayı gerçekleştirmesine yardımcı olur.
  • yakalamak– bir program, bir istisnayı yakalamak için bir istisna işleyicisi kullanır. Bir programın sorunu çözmeniz gereken bölümüne eklenir. Bu, catch anahtar sözcüğü kullanılarak yapılır.
  • denemek– 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, try ve catch anahtar sözcüklerini kullanan bir yöntemle yakalanacaktır. Try/catch bloğu, istisna oluşturabilecek kodu çevrelemelidir. Bu tür kodlara korumalı kod adı verilir.

Sözdizimi

Try/catch şu 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 ifademiz olmasına rağmen birçok catch ifademiz olabilir.
  • ExceptionName, yakalanacak istisnanın adıdır.
  • İstisna1, istisna2 ve istisnaN, istisnalara atıfta bulunmak için tanımladığınız adlardır.

Örnek 1:

#include<iostream>
#include<vector>
using namespace std;

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

Çıktı:

İstisna İşleme Anahtar Kelimeleri

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

İstisna İşleme Anahtar Kelimeleri

Code Açıklama:

  1. Kullanmak için iostream başlık dosyasını programa ekleyin. fonksiyonlar.
  2. İşlevlerini kullanmak için vektör başlık dosyasını programa ekleyin.
  3. Programdaki std ad alanını çağırmadan sınıflarına ekleyin.
  4. Main() işlevini çağırın. Program mantığı kendi bünyesinde eklenmelidir.
  5. Tamsayı verilerini depolamak için vec adında bir vektör oluşturun.
  6. 0 elemanını vec adlı vektöre ekleyin.
  7. 1 elemanını vec adlı vektöre ekleyin.
  8. Bir yorum. Tarafından atlanacak C++ derleyici.
  9. Bir istisnayı yakalamak için try ifadesini kullanın. {, try/catch bloğunun gövdesinin başlangıcını işaret eder. Gövde içine eklenen kod korumalı kod haline gelecektir.
  10. Vec isimli vektörün indeks 2'sinde (üçüncü eleman) saklanan elemana 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ı ex değişkeninde saklanacaktır.
  13. İstisna yakalanırsa konsoldaki bazı mesajları yazdırın.
  14. Catch bloğunun gövdesinin sonu.
  15. Program başarılı bir şekilde yürütüldüğünde bir değer döndürmelidir.
  16. main() işlev gövdesinin sonu.

Örnek 2:

#include <iostream>
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ı:

İstisna İşleme Anahtar Kelimeleri

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

İstisna İşleme Anahtar Kelimeleri

Code Açıklama:

  1. İşlevlerini kullanmak için iostream başlık dosyasını programa ekleyin.
  2. Programdaki std ad alanını çağırmadan sınıflarına ekleyin.
  3. İki tam sayı argümanı, x ve y alan zeroDivision adlı bir fonksiyon oluşturun. Fonksiyon bir double sonuç döndürmelidir.
  4. Y değişken argümanının değerinin 0 olup olmadığını kontrol etmek için bir if ifadesi kullanın. {, if gövdesinin başlangıcını işaretler.
  5. Y 0 ise döndürülecek/atılacak mesaj.
  6. If 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 11 değerini atayın.
  11. Bir tamsayı değişkeni b bildirin ve ona 0 değerini atayın.
  12. c adında bir double değişken tanımlayıp bu değişkene 0 değerini atayın.
  13. Bir istisnayı yakalamak için try ifadesini kullanın. {, try/catch bloğunun gövdesinin başlangıcını işaret eder. Gövde içine eklenen kod korumalı kod haline gelecektir.
  14. ZeroDivision fonksiyonunu çağırın ve a ve b argümanlarına, 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. Döndürülen hata mesajını konsola yazdırın.
  19. Catch bloğunun gövdesinin sonu.
  20. Program başarılı bir şekilde yürütüldüğünde bir değer döndürmelidir.
  21. main() işlev gövdesinin sonu.

C++ Standart İstisnalar

C++ Standart İstisnalar

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

Istisna Açıklama
std::istisna Bu bir istisnadır ve tüm standartların ana sınıfıdır. C++ istisnalar.
std::bad_alloc Bu istisna yeni bir anahtar kelime tarafından atılır.
std::bad_cast Bu, Dynamic_cast tarafından oluşturulan bir istisnadır.
std::bad_istisna Beklenmeyen istisnaları ele almak için kullanışlı bir cihaz C++ programları.
std::bad_typeid Typeid tarafından oluşturulan bir istisna.
std::logic_error Bu istisna teorik olarak kod okunarak tespit edilebilir.
std::domain_error Bu, matematiksel olarak geçersiz bir etki alanı kullanıldıktan sonra ortaya çıkan bir istisnadır.
std::geçersiz_argument Geçersiz bağımsız değişkenlerin kullanılması nedeniyle oluşturulan bir istisna.
std::length_error Büyük bir std::string oluşturulduktan sonra oluşan bir istisna.
std::aralığın_dışında Yöntemle atıldı.
std::runtime_error Bu, kod okunarak tespit edilemeyen bir istisnadır.
std::overflow_error Bu istisna, matematiksel bir taşma meydana geldikten sonra atılır.
std::range_error Bu istisna, aralık dışında bir değer depolamaya çalıştığınızda ortaya çıkar.
std::underflow_error Matematiksel yetersiz akışın ortaya çıkmasından sonra atılan bir istisna.

Kullanıcı Tanımlı İstisnalar

MKS C++ std:: Exception sınıfı, istisna olarak atılabilecek nesneleri tanımlamamıza olanak tanır. Bu sınıf şu şekilde tanımlanmıştır: başlık. Sınıf bize What adında bir sanal üye işlevi sağlar.

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

Örnek:

#include <iostream>
#include <exception>
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ı:

Kullanıcı Tanımlı İstisnalar

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

Kullanıcı Tanımlı İstisnalar

Code Açıklama:

  1. iostream başlık dosyasını programımıza ekleyin. Fonksiyonlarını hata almadan kullanacağız.
  2. İstisna başlık dosyasını programımıza ekleyin. Fonksiyonlarını hatasız olarak kullanacağız.
  3. Sınıflarını çağırmadan kullanmak için programımıza std ad alanını ekleyin.
  4. newExceptionadlı yeni bir sınıf oluşturun. Bu sınıf istisna sınıfını miras alır C++.
  5. Sınıf gövdesinin başlangıcı.
  6. İstisna başlık dosyasında tanımlanan sanal üye işlevinin (what()) üzerine yazın. Daha sonra kendi istisnamızı, yeni istisnayı tanımlayacağız.
  7. Yeni istisnanın tanımını başlatın.
  8. Yeni istisnanın yakalanması durumunda döndürülecek mesaj.
  9. Yeni istisnanın tanımının sonu.
  10. newException sınıfının gövdesinin sonu. Newex, yeni istisnamızı yakalamak için kullanılacak addır ve bundan sonra newException çağrılacaktır.
  11. Main() işlevini çağırın. Program mantığı kendi bünyesinde eklenmelidir. { gövdesinin başlangıcını işaret eder.
  12. İstisnayı işaretlememiz gereken kodu işaretlemek için try ifadesini kullanın. {, try/catch bloğunun gövdesinin başlangıcını işaret eder. Bununla çevrelenen kod korunacaktır.
  13. Yakalanırsa newex istisnasını atın.
  14. Deneme gövdesinin sonu.
  15. İstisnayı yakalamak için catch ifadesini kullanın. İstisna hata mesajı ex değişkeninde saklanacaktır.
  16. İstisna hata mesajını konsola 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.

SSS

Hata yönetimi, çalışma zamanı hatalarını tespit etme ve bunlara yanıt verme yöntemidir. C++ `try`, `throw` ve `catch` anahtar kelimelerini kullanarak, programın çökmek yerine kurtarılmasını sağlıyoruz.

C++ Üç anahtar kelime kullanır: `try` başarısız olabilecek kodu sarmalar, `throw` bir hata oluştuğunda istisna fırlatır ve `catch` fırlatılan istisnayı ele alır.

Riskli kodu bir `try` bloğuna yerleştirin, ardından `try` bloğundan fırlatılan belirli bir istisna türünü ele alan bir veya daha fazla `catch` bloğu ekleyin.

Standart istisnalar, std::bad_alloc ve std::out_of_range gibi, çalışma zamanında sık karşılaşılan hataları bildiren, istisna başlığında yer alan yerleşik istisna sınıflarıdır.

Kullanıcı tanımlı istisna, genellikle std::exception'dan türetilen ve kendi özel hata durumunuzu tanımlamak için what() fonksiyonunu geçersiz kılan özel bir sınıftır.

GitHub Copilot gibi yapay zeka asistanları, riskli kodları try-catch bloklarına sarar, özel istisna sınıfları oluşturur ve siz yazarken hangi istisnaların yakalanacağını önerir.

Evet. Yapay zeka destekli araçlar, ele alınmayan istisnaları tespit eder, genel olanlar yerine özel yakalama blokları önerir ve anlamlı hata mesajları ekleyerek kodunuzu daha anlaşılır hale getirir. C++ kod daha sağlam.

`throw` bir hata tespit edildiğinde istisna fırlatırken, `catch` bu istisnayı alır ve hatayı işleyen veya bildiren kodu çalıştırır.

Bu yazıyı şu şekilde özetleyin: