Özet: String Wrapper
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 61.
Görev
KolayDinamik olarak ayrılmış bir karakter dizisini saran bir StringObject modülü oluşturalım. Bu tekrar alıştırması, belleği güvenli bir şekilde yönetmek için birlikte çalışan eksiksiz nesne yaşam döngüsünü, oluşturucuyu, salt okunur yöntemi ve yok ediciyi bir araya getirir.
Üç dosya oluşturacaksın:
stringobj.h: Tek bir üyeye sahip birStringObjectyapısı bildir:char *text(dinamik olarak ayrılmış bir dizeye işaretçi). Ayrıca üç işlev bildir:create_string: birconst char *girdisi alır ve yeni ayrılmış bir StringObject'a işaretçi döndürürprint_string: birconst StringObject *alır ve depolanan metni görüntülerfree_string: birStringObject *alır ve ayrılmış tüm belleği serbest bırakır
STRINGOBJ_Hsembolüyle include guard kullan.stringobj.c: Üç işlevin tümünü uygula. Oluşturucun önce yapı için bellek ayırmalı, ardından metin için bellek ayırmalı (null sonlandırıcı içinstrlendeğerine bir eklemeyi unutma) ve girdi dizesini kopyalamalıdır. Yok edicin ters sırayla serbest bırakmalıdır: önce dahilitextarabelleği, ardından yapının kendisi. Güvenlik için yok edicide bir NULL kontrolü ekle.main.c: Modülünü bir dize nesnesi oluşturmak, içeriğini görüntülemek ve ardından düzgün bir şekilde temizlemek için kullan.
Bir girdi alacaksın: StringObject içinde depolanacak bir metin dizesi.
Ana dosyanda, sağlanan metinle bir StringObject oluştur, içeriğini yazdır, belleği serbest bırak ve ardından bir onay mesajı yazdır.
print_string işlevi şu biçimde çıktı vermelidir:
Text: {text}Serbest bıraktıktan sonra şunu yazdır:
FreedÖrneğin, girdi Hello World olduğunda çıktı şöyle olur:
Text: Hello World
FreedKendin dene
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Varsa yeni satırı kaldır
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Create a StringObject with the input text
// TODO: print_string kullanarak dizeyi yazdır
// TODO: Free the StringObject using free_string
// TODO: Temizlemeyi onaylamak için "Freed" yazdır
return 0;
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil HiyerarşisiKendi başına pratik yap: Online C derleyicisi