Menu
CoddyTech

Ö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 hakkında öğrendiğin her şeyi bir araya getiren bir GenericContainer sınıf şablonu oluşturalım. Öğeleri dinamik olarak saklayabilen ve şablon teknikleriyle kullanışlı işlemler sunan esnek, tür güvenli bir kapsayıcı oluşturacaksın.

Kodunu iki dosyaya ayıracaksın:

  • GenericContainer.h: Sınıf şablonunu burada tanımla. GenericContainer şunları yapmalı:

    Bir diziye işaretçi kullanarak öğeleri dinamik biçimde saklamalı; ayrıca mevcut boyutu ve kapasiteyi takip etmeli.

    Şu temel metotları sağlamalı:

    • Başlangıç kapasitesi alan bir kurucu
    • Dinamik belleği gerektiği gibi temizleyen bir yıkıcı
    • push(T value): kapsayıcıya bir öğe ekler (bu alıştırmada kapasitenin her zaman yeterli olduğunu varsay)
    • get(size_t index): verilen dizindeki öğeyi döndürür
    • getSize(): mevcut öğe sayısını döndürür

    Bir GenericContainer<T>& alan ve tüm öğeleri aralarında boşluk olacak şekilde yazdırıp ardından yeni satıra geçen printContainer adlı bir işlev şablonu ekle.

    1 veya 0 yerine true ya da false yazdıran, GenericContainer<bool> için bir printContainer şablon özelleştirmesi oluştur.

    Bir GenericContainer<T>& ve istenen sayıda değer alan, katlama ifadesi kullanarak bu değerlerin her birini kapsayıcıya ekleyen pushAll adlı değişken argümanlı bir işlev şablonu ekle. Virgül işleci üzerinde yapılan bir katlama, örneğin (container.push(args), ...);, her argüman için çağrıyı bir kez çalıştırır.

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

    Kapsayıcını şu şekilde göster:

    1. Kapasitesi 10 olan bir GenericContainer<int> oluştur
    2. Üç tam sayının tümünü bir kerede eklemek için pushAll kullan
    3. Boyutu yazdır: Int container size: <size>
    4. Tam sayıları görüntülemek için printContainer çağır
    5. Kapasitesi 5 olan bir GenericContainer<double> oluştur
    6. Double değerini ve 2.5 sabit değerini ayrı push çağrılarıyla ekle
    7. Double değerlerini görüntülemek için printContainer çağır
    8. Kapasitesi 5 olan bir GenericContainer<bool> oluştur
    9. Boolean girdisini ve false sabit değerini ekle
    10. Boolean değerlerini görüntülemek için printContainer çağır (true/false göstermeli)

Örneğin, girdiler 10, 20, 30, 3.14 ve true olduğunda:

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

Bu alıştırma, kapsayıcı için sınıf şablonlarını, özel bool yazdırma için şablon özelleştirmesini ve esnek pushAll işlevi için değişken argümanlı şablonları bir araya getiriyor. Kapsayıcın RAII ilkelerine uygun olarak kendi belleğini yöneterek şablonların doğru kaynak yönetimiyle nasıl bütünleştiğini gösteriyor.

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 değerini bool değerine dönüştür
    bool boolVal = (boolStr == "true");
    
    // TODO: Kapasitesi 10 olan bir GenericContainer<int> oluştur
    
    // TODO: Üç tamsayının tümünü tek seferde eklemek için pushAll kullan
    
    // TODO: Boyutu yazdır: "Int container size: <size>"
    
    // TODO: Tamsayıları görüntülemek için printContainer çağır
    
    // TODO: Kapasitesi 5 olan bir GenericContainer<double> oluştur
    
    // TODO: double değerini ve 2.5 değerini ayrı ayrı push çağrılarıyla ekle
    
    // TODO: double değerlerini görüntülemek için printContainer çağır
    
    // TODO: Kapasitesi 5 olan bir GenericContainer<bool> oluştur
    
    // TODO: Boolean girdisini ve false değerini ekle
    
    // TODO: Boolean değerlerini görüntülemek için printContainer çağır
    
    return 0;
}

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

Kendi başına pratik yap: Online C++ derleyicisi