Ö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ğiniz her şeyi bir araya getiren bir GenericContainer sınıf şablonu oluşturalım. Öğeleri dinamik olarak depolayabilen ve şablon teknikleri aracılığıyla kullanışlı işlemler sunan esnek, tür güvenli bir kapsayıcı oluşturacaksınız.
Kodunuzu iki dosya arasında düzenleyeceksiniz:
GenericContainer.h: Sınıf şablonunuzu burada tanımlayın.GenericContainerşunları yapmalıdır:Öğeleri, bir diziye işaretçi kullanarak dinamik olarak depolamalı; ayrıca geçerli boyutu ve kapasiteyi takip etmelidir.
Şu temel yöntemleri sağlamalıdır:
- Başlangıç kapasitesini alan bir kurucu
- Dinamik belleği uygun şekilde temizleyen bir yıkıcı
push(T value): kapsayıcıya bir öğe ekler (bu görev için kapasitenin her zaman yeterli olduğunu varsayın)get(size_t index): verilen dizindeki öğeyi döndürürgetSize(): geçerli öğe sayısını döndürür
Bir
printContaineralan ve tüm öğeleri boşluklarla ayırarak, ardından bir satır sonu yazdıranGenericContainer<T>&adlı bir işlev şablonu ekleyin.printContaineriçin,GenericContainer<bool>veyatrueyerinefalseya da1yazdıran bir0şablon özelleştirmesi oluşturun.Bir
pushAllve istenen sayıda değer alan, her birini bir fold ifadesi kullanarak kapsayıcıya ekleyenGenericContainer<T>&adlı değişken bağımsız değişkenli bir işlev ş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ğeri
- Dize olarak bir boolean (
trueveyafalse)
Kapsayıcınızı şunları yaparak gösterin:
- Kapasitesi 10 olan bir
GenericContainer<int>oluşturma - Üç tam sayının tümünü aynı anda eklemek için
pushAllkullanma - Boyutu yazdırma:
Int container size: <size> - Tam sayıları görüntülemek için
printContainerçağırma - Kapasitesi 5 olan bir
GenericContainer<double>oluşturma - Double değerini ve
2.5değişmezini ayrıpushçağrıları kullanarak ekleme - Double değerlerini görüntülemek için
printContainerçağırma - Kapasitesi 5 olan bir
GenericContainer<bool>oluşturma - Boolean girdisini ve
falsedeğişmezini ekleme - Boolean değerlerini görüntülemek için
printContainerçağırma (true/falsegöstermelidir)
Ö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 görev, kapsayıcı için sınıf şablonlarını, özel bool yazdırma işlemi için şablon özelleştirmesini ve esnek pushAll işlevi için değişken bağımsız değişkenli şablonları bir araya getirir. Kapsayıcınız, RAII ilkelerini izleyerek kendi belleğini yönetir ve şablonların uygun kaynak yönetimiyle nasıl bütünleştiğini 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: Kapasitesi 10 olan GenericContainer<int> oluştur
// TODO: Üç tamsayının hepsini bir kerede eklemek için pushAll kullan
// TODO: Print the size: "Int container size: <size>"
// TODO: Call printContainer to display the integers
// TODO: Kapasitesi 5 olan GenericContainer<double> oluştur
// TODO: double değerini ve 2.5'i bireysel push çağrıları kullanarak ekle
// TODO: Call printContainer to display the doubles
// TODO: Kapasitesi 5 olan GenericContainer<bool> oluştur
// TODO: Boolean girdiyi ve false değerini ekle
// TODO: Call printContainer to display the booleans
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