Özet - String Sınıfı
Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 26 / 104.
Görev
KolayKendi dinamik karakter dizisini yöneten eksiksiz bir String sınıfı oluşturalım ve bu bölümdeki tüm oluşturucu ve yok edici kavramlarını bir araya getirelim. Bu, std::string sınıfının dahili olarak nasıl çalıştığını yansıtan klasik bir alıştırmadır.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
String.h:Stringsınıfınızı Rule of Five'ı izleyerek tanımlayın. Sınıfınızchar*adlı birdataişaretçisini vesize_t lengthüyesini yönetmelidir. Şunları uygulayın:- Boş bir dize oluşturan bir varsayılan oluşturucu (null sonlandırıcı için tek bir karakter ayırın, length değerini 0 olarak ayarlayın).
"Default constructed"yazdırın - Yeni ayrılmış belleğe C-dizesini kopyalayan,
const char*alan bir parametreli oluşturucu."Constructed: <text>"yazdırın - Başka bir String'in derin kopyasını oluşturan bir kopya oluşturucu.
"Copied: <text>"yazdırın - Sahipliği aktaran,
noexceptile işaretlenmiş bir taşıma oluşturucusu. Kaynağı null yapmadan önceki metni kullanarak"Moved: <text>"yazdırın - Belleği güvenli bir şekilde serbest bırakan bir yok edici (null olup olmadığını kontrol edin).
"Destroyed: <text>"yazdırın (data null ise veya length 0 ise"Destroyed: (empty)"yazdırın) - Uzunluğu döndüren bir
size()yöntemi - Karakter işaretçisini döndüren bir
c_str()yöntemi (null ise""döndürün)
- Boş bir dize oluşturan bir varsayılan oluşturucu (null sonlandırıcı için tek bir karakter ayırın, length değerini 0 olarak ayarlayın).
main.cpp: Tüm oluşturucuların birlikte çalıştığını gösterin. Girdiden bir metin dizesi okuyun, ardından:- Varsayılan oluşturucuyu kullanarak
Stringadlı birs1oluşturun - Girdi metniyle
Stringadlı birs2oluşturun String'yi kopyalayaraks3adlı birs2oluşturunString'den taşıyaraks4adlı birs2oluşturun"--- Status ---"yazdırın- Her dize için (s1'den s4'e kadar)
"s<n>: \"<text>\" (length: <len>)"yazdırın
- Varsayılan oluşturucuyu kullanarak
Verimlilik için tüm oluşturucularda başlatıcı listelerini kullanın. Taşıma işleminden sonra s2, uzunluğu 0 olan boş bir dize olmalı, s4 ise özgün metni içermelidir. Sondaki yok edici iletileri, dört nesnenin de oluşturulma sırasının tersine temizlendiğini gösterecektir.
<cstring> ve strlen için strcpy, <utility> için std::move() ekleyin. Başlık dosyanızda başlık koruyucularını kullanmayı unutmayın.
Kendin dene
#include <iostream>
#include <string>
#include "String.h"
using namespace std;
int main() {
string input;
getline(cin, input);
// TODO: Varsayılan kurucu kullanarak String s1 oluşturun
// TODO: Giriş metni ile String s2 oluşturun
// TODO: s2'yi kopyalayarak String s3 oluşturun
// TODO: s2'den taşıyarak String s4 oluşturun (std::move kullanın)
// Durum başlığını yazdırın
cout << "--- Status ---" << endl;
// TODO: s1'den s4'e kadar her bir string için durumu yazdırın
// Format: "s<n>: \"<text>\" (length: <len>)"
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