Ödünç verme
- C++ kursu
- Orta seviye
- Ders 67/116
- 6 dk
checkout ve return metotlarıyla ödünç akışını yazarsın.
Ödünç verme
Kütüphanenin temel işlevi ödünç vermedir. checkout(int idx) metodu belirli bir kitabı ödünç verir: önce indeks geçerli mi ve kitap müsait mi diye bakar, sonra borrowed[idx] değerini true yapar ve true döndürür.
İki koşul kontrol edilir: idx < 0 || idx >= (int)books.size() ile sınırların dışı, borrowed[idx] ile zaten ödünç verilmiş. Her iki durumda da false döner. Bu tasarımla aynı kitap iki kez ödünç verilemez. borrowed vektörü addBook sırasında false olarak başlatılır.
Müsaitlik kontrolü
checkout metodu iki durumda false döndürür: geçersiz indeks veya zaten ödünç verilmiş kitap. Bu sayede çağıran kod sonuca göre davranabilir. if (lib.checkout(0)) ile ödünç verme başarılıysa bir mesaj yazdırırsın.
Önceki dersin Library sınıfını alıp checkout metodunu ekleyeceğiz. borrowed vektörü zaten addBook sırasında false olarak başlatılıyordu. Bu yüzden yeni bir alan eklemeye gerek yok; yalnızca yeni bir metot ekleriz. Bu, birikimli tasarımın gücüdür.
Uygulama checkout metodunu ekle
Önceki dersin Book ve Library sınıflarını al. Library'ye bool checkout(int idx) metodu ekle: geçersiz indekste veya zaten ödünç verilmişse false döndürür, değilse borrowed[idx] = true yapıp true döndürür. main içinde 0. kitabı ödünç ver ve başarılıysa "ödünç" yazdır.
Başlangıç kodu
#include <iostream>
#include <string>
#include <vector>
class Book {
private:
std::string title;
std::string author;
public:
Book(std::string t, std::string a) : title(t), author(a) {}
std::string getTitle() const { return title; }
std::string getAuthor() const { return author; }
};
class Library {
private:
std::vector<Book> books;
std::vector<bool> borrowed;
public:
void addBook(const Book& b) { books.push_back(b); borrowed.push_back(false); }
size_t count() const { return books.size(); }
Book getBook(int idx) const { return books[idx]; }
};
int main() {
Library lib;
lib.addBook(Book("Tutunamayanlar", "Oğuz Atay"));
lib.addBook(Book("İnce Memed", "Yaşar Kemal"));
// 0. kitabı ödünç ver ve sonucu yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <string>
#include <vector>
class Book {
private:
std::string title;
std::string author;
public:
Book(std::string t, std::string a) : title(t), author(a) {}
std::string getTitle() const { return title; }
std::string getAuthor() const { return author; }
};
class Library {
private:
std::vector<Book> books;
std::vector<bool> borrowed;
public:
void addBook(const Book& b) { books.push_back(b); borrowed.push_back(false); }
size_t count() const { return books.size(); }
Book getBook(int idx) const { return books[idx]; }
bool checkout(int idx) {
if (idx < 0 || idx >= (int)books.size()) return false;
if (borrowed[idx]) return false;
borrowed[idx] = true;
return true;
}
};
int main() {
Library lib;
lib.addBook(Book("Tutunamayanlar", "Oğuz Atay"));
lib.addBook(Book("İnce Memed", "Yaşar Kemal"));
if (lib.checkout(0)) {
std::cout << "ödünç";
}
return 0;
}Beklenen çıktı
ödünç
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Koşulu amacıyla eşle
| Kavram | Anlamı |
|---|---|
idx < 0 |
Negatif indeks |
idx >= books.size() |
Sınır dışı |
borrowed[idx] |
Zaten ödünç |
borrowed[idx] = true |
İşaretle |
2 İşaretleme satırını tamamla
if (borrowed[idx]) return false;
____[idx] = true;
return true;
if (borrowed[idx]) return false;
borrowed[idx] = true;
return true;
Açıklama: borrowed[idx] = true ile ödünç verildi işaretlenir.
3 checkout metodu ne yapar?
bool checkout(int idx);- Kitabı ödünç verir Doğru cevap
- Kitap siler
- Kitap sayar
- Kitap ekler
Açıklama: checkout kitabı ödünç verir ve borrowed işaretler.