Menu
Coddy logo textTech

Ö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.

challenge icon

Görev

Kolay

Kendi 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: String sınıfınızı Rule of Five'ı izleyerek tanımlayın. Sınıfınız char* adlı bir data işaretçisini ve size_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, noexcept ile 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)
  • 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 String adlı bir s1 oluşturun
    • Girdi metniyle String adlı bir s2 oluşturun
    • String'yi kopyalayarak s3 adlı bir s2 oluşturun
    • String'den taşıyarak s4 adlı bir s2 oluşturun
    • "--- Status ---" yazdırın
    • Her dize için (s1'den s4'e kadar) "s<n>: \"<text>\" (length: <len>)" yazdırın

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

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