Menu
Coddy logo textTech

Özet - Generic Konteyner

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 69 / 104.

challenge icon

Görev

Kolay

Bu bölümde şablonlar (templates) hakkında öğrendiğiniz her şeyi bir araya getiren bir GenericContainer sınıf şablonu oluşturalım. Elemanları dinamik olarak depolayabilen ve şablon teknikleri aracılığıyla kullanışlı işlemler sunan esnek, tip güvenli bir konteyner oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • GenericContainer.h: Sınıf şablonunuzu burada tanımlayın. GenericContainer şunları yapmalıdır:

    Bir diziye işaret eden bir pointer kullanarak elemanları dinamik olarak depolamalı, mevcut boyutu ve kapasiteyi takip etmelidir.

    Şu temel metotları sağlamalıdır:

    • Başlangıç kapasitesini alan bir yapıcı (constructor)
    • Dinamik belleği düzgün bir şekilde temizleyen bir yıkıcı (destructor)
    • push(T value) — konteynere bir eleman ekler (bu görev için kapasitenin her zaman yeterli olduğunu varsayın)
    • get(size_t index) — verilen indeksteki elemanı döndürür
    • getSize() — mevcut eleman sayısını döndürür

    Bir GenericContainer<T>& alan ve tüm elemanları aralarında boşluk bırakarak yazdıran, ardından bir alt satıra geçen printContainer adlı bir fonksiyon şablonu ekleyin.

    GenericContainer<bool> için printContainer fonksiyonunun, 1 veya 0 yerine true veya false yazdıran bir şablon özelleştirmesini (template specialization) oluşturun.

    Bir GenericContainer<T>& ve herhangi bir sayıda değer alan, her birini bir katlama ifadesi (fold expression) kullanarak konteynere ekleyen pushAll adlı bir değişken parametreli (variadic) fonksiyon şablonu ekleyin.

  • main.cpp: Beş girdi okuyun (her biri ayrı bir satırda):
    1. Birinci tam sayı
    2. İkinci tam sayı
    3. Üçüncü tam sayı
    4. Bir double değer
    5. Dize olarak bir boolean (true veya false)

    Konteynerinizi şunları yaparak gösterin:

    1. 10 kapasiteli bir GenericContainer<int> oluşturun
    2. Üç tam sayının tamamını tek seferde eklemek için pushAll kullanın
    3. Boyutu yazdırın: Int container size: <size>
    4. Tam sayıları görüntülemek için printContainer fonksiyonunu çağırın
    5. 5 kapasiteli bir GenericContainer<double> oluşturun
    6. Double değerini ve 2.5 sabitini ayrı push çağrıları kullanarak ekleyin
    7. Double değerleri görüntülemek için printContainer fonksiyonunu çağırın
    8. 5 kapasiteli bir GenericContainer<bool> oluşturun
    9. Boolean girdisini ve false sabitini ekleyin
    10. Boolean değerleri görüntülemek için printContainer fonksiyonunu çağırın (true/false olarak görünmelidir)

Örneğin, 10, 20, 30, 3.14 ve true girdileriyle:

Int container size: 3
10 20 30 
3.14 2.5 
true false 

Bu görev, konteyner için sınıf şablonlarını, özel bool yazdırma için şablon özelleştirmesini ve esnek pushAll fonksiyonu için değişken parametreli şablonları birleştirir. Konteyneriniz, RAII prensiplerini takip ederek kendi belleğini yönetir ve şablonların uygun kaynak yönetimiyle nasıl entegre olduğunu gösterir.

Kendin dene

#include <iostream>
#include <string>
#include "GenericContainer.h"

using namespace std;

int main() {
    // Girdileri oku
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // String'i bool'a dönüştür
    bool boolVal = (boolStr == "true");
    
    // TODO: 10 kapasiteli GenericContainer<int> oluştur
    
    // TODO: Üç tam sayının hepsini birden eklemek için pushAll kullan
    
    // TODO: Boyutu yazdır: "Int container size: <size>"
    
    // TODO: Tam sayıları görüntülemek için printContainer çağır
    
    // TODO: 5 kapasiteli GenericContainer<double> oluştur
    
    // TODO: Bireysel push çağrılarını kullanarak double değerini ve 2.5'i ekle
    
    // TODO: Double değerleri görüntülemek için printContainer çağır
    
    // TODO: 5 kapasiteli GenericContainer<bool> oluştur
    
    // TODO: Boolean girdisini ve false değerini ekle
    
    // TODO: Boolean değerleri görüntülemek için printContainer çağır
    
    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler