Özet - Generic Konteyner
Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 69 / 104.
Görev
KolayBu 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ürgetSize()— 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çenprintContaineradlı bir fonksiyon şablonu ekleyin.GenericContainer<bool>içinprintContainerfonksiyonunun,1veya0yerinetrueveyafalseyazdı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 ekleyenpushAlladlı bir değişken parametreli (variadic) fonksiyon şablonu ekleyin.main.cpp: Beş girdi okuyun (her biri ayrı bir satırda):- Birinci tam sayı
- İkinci tam sayı
- Üçüncü tam sayı
- Bir double değer
- Dize olarak bir boolean (
trueveyafalse)
Konteynerinizi şunları yaparak gösterin:
- 10 kapasiteli bir
GenericContainer<int>oluşturun - Üç tam sayının tamamını tek seferde eklemek için
pushAllkullanın - Boyutu yazdırın:
Int container size: <size> - Tam sayıları görüntülemek için
printContainerfonksiyonunu çağırın - 5 kapasiteli bir
GenericContainer<double>oluşturun - Double değerini ve
2.5sabitini ayrıpushçağrıları kullanarak ekleyin - Double değerleri görüntülemek için
printContainerfonksiyonunu çağırın - 5 kapasiteli bir
GenericContainer<bool>oluşturun - Boolean girdisini ve
falsesabitini ekleyin - Boolean değerleri görüntülemek için
printContainerfonksiyonunu çağırın (true/falseolarak 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
1OOP Temelleri
Harici DosyalarC++ Build ve DerlemeBaşlık Dosyaları ve Kaynak DosyalarıAd Alanları ve KapsamC++'ta OOP'ye GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriÖzet - Basit Hesap Makinesi4Sınıf Özellikleri
Örnek ve Statik ÜyelerGetter ve Setter MetotlarıConst Üye FonksiyonlarMutable Anahtar KelimesiStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim SeviyeleriCtor ve Dtor Çağrılma SırasıMetot Geçersiz KılmaSanal Fonksiyonlar ve VTableÇoklu KalıtımSanal KalıtımÖzet - Çalışan Hiyerarşisi10STL Genel Bakış
STL Genel Bakış ve FelsefesiSTL KonteynerleriİteratörlerSTL AlgoritmalarıFunctor'lar ve Lambda İfadeleriÖzet - Kelime Frekansı13Tasarım Kalıpları 1. Bölüm
Tasarım Kalıplarına GirişSingleton KalıbıFactory ve Abstract FactoryBuilder KalıbıObserver KalıbıStrategy Kalıbı2Bellek Yönetimi
Stack ve Heap Bellekİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++'ta Akıllı İşaretçilerC++'ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'da Erişim BelirleyicilerDerinlemesine Erişim BelirleyicilerBilgi GizlemeStruct vs Classİç İçe ve Dahili SınıflarÖzet - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDynamic Casting ve RTTIÖzet - Şekil Hesaplayıcı3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopya YapıcıTaşıma YapıcısıYapıcı İlklendirme ListeleriTemsilci YapıcılarYıkıcılara Derinlemesine BakışÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatör Aşırı YüklemeKarşılaştırma Operatörü Aşırı YüklemeStream OperatörleriAtama Operatörü Aşırı Yükleme[] ve () Operatör Aşırı YüklemeTip Dönüşüm OperatörleriÖzet - Matris Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeVariadic ŞablonlarSFINAE ve Type Traits TemelleriÖzet - Generic Konteyner