Ö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 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ürgetSize(): 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çenprintContaineradlı bir işlev şablonu ekle.1veya0yerinetrueya dafalseyazdıran,GenericContainer<bool>için birprintContainerş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 ekleyenpushAlladlı 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):- İlk tam sayı
- İkinci tam sayı
- Üçüncü tam sayı
- Bir double değeri
- String olarak bir boolean (
trueveyafalse)
Kapsayıcını şu şekilde göster:
- Kapasitesi 10 olan bir
GenericContainer<int>oluştur - Üç tam sayının tümünü bir kerede eklemek için
pushAllkullan - Boyutu yazdır:
Int container size: <size> - Tam sayıları görüntülemek için
printContainerçağır - Kapasitesi 5 olan bir
GenericContainer<double>oluştur - Double değerini ve
2.5sabit değerini ayrıpushçağrılarıyla ekle - Double değerlerini görüntülemek için
printContainerçağır - Kapasitesi 5 olan bir
GenericContainer<bool>oluştur - Boolean girdisini ve
falsesabit değerini ekle - Boolean değerlerini görüntülemek için
printContainerçağır (true/falsegö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
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 KonteynerKendi başına pratik yap: Online C++ derleyicisi