C++
Hata yönetimi
try/catch ile girdi doğrulama ve hata yönetimi eklersin.
Özel istisna ile doğrulama
Bu derste addTask işlevine bir doğrulama ekleyeceğiz. Başlık boşsa InvalidTaskException istisnası fırlatılacak; çağıran kod bunu try/catch ile yakalayıp kullanıcıya mesaj gösterecek.
InvalidTaskException, std::exception'dan türetilmiş bir sınıftır; what() metodunu geçersiz kılarak özel mesaj döndürür. Bu sayede program, geçersiz girişlerde çökmeden uygun bir yanıt verebilir.
try/catch ile yakalama
addTask çağrısını try bloğuna alırsın; istisna fırlatıldığında catch bloğu çalışır. catch (const InvalidTaskException& e) biçiminde yakalanan istisnanın mesajına e.what() ile erişilir.
try {
addTask(tasks, "", "bekliyor");
} catch (const InvalidTaskException& e) {
cout << e.what();
}
Burada boş başlık InvalidTaskException fırlatır; catch bunu yakalayıp mesajı yazdırır. Program çökmeden yoluna devam eder. Bu desen, kullanıcı girişi doğrulamanın standart yoludur.
Uygulama InvalidTaskException sınıfı ekle
class InvalidTaskException : public std::exception tanımla; public: bloğunda const char* what() const noexcept override { return "geçersiz görev"; } yaz. addTask işlevinin başına if (title.empty()) throw InvalidTaskException(); ekle. main içinde printMenu(); çağrısından sonra try { addTask(tasks, "Ödev", "bekliyor"); addTask(tasks, "", "bekliyor"); } catch (const InvalidTaskException& e) { cout << e.what() << endl; } ve en son listTasks(tasks); çağrısı ekle.
Örnek çözümü göster
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
using namespace std;
struct Task {
string title;
string status;
};
class InvalidTaskException : public std::exception {
public:
const char* what() const noexcept override {
return "geçersiz görev";
}
};
void printMenu() {
cout << "1 - Ekle" << endl;
cout << "2 - Listele" << endl;
cout << "3 - Çıkış" << endl;
}
void addTask(vector<Task>& tasks, string title, string status) {
if (title.empty()) throw InvalidTaskException();
Task t;
t.title = title;
t.status = status;
tasks.push_back(t);
}
void listTasks(const vector<Task>& tasks) {
for (Task t : tasks) {
cout << t.title << " - " << t.status << endl;
}
}
int main() {
printMenu();
vector<Task> tasks;
try {
addTask(tasks, "Ödev", "bekliyor");
addTask(tasks, "", "bekliyor");
} catch (const InvalidTaskException& e) {
cout << e.what() << endl;
}
listTasks(tasks);
return 0;
}
Kendini test et
-
Boşluğu doldur: throw çağrısı
if (title.empty()) {
____ InvalidTaskException();
}
Cevabı göster
if (title.empty()) {
throw InvalidTaskException();
}
-
addTask'ta boş başlık nasıl bildirilir?
- Program çöker
- 0 döndürür
- Yoksayar
- InvalidTaskException fırlatır
Cevabı göster
InvalidTaskException fırlatır — Boş başlıkta InvalidTaskException fırlatılır.
-
Bloğu göreviyle eşleştir
- try
- addTask çağrısı
- throw
- istisna fırlatır
- catch
- mesajı yazdırır
Sıradaki ders: Birleştirme