Özet: String Wrapper
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 16 / 61.
Görev
KolayDinamik olarak ayrılmış bir karakter dizisini sarmalayan bir StringObject modülü oluşturalım. Bu tekrar görevi, bellek yönetimini güvenli bir şekilde gerçekleştirmek için nesne yaşam döngüsünün tamamını —yapıcı (constructor), salt okunur yöntem ve yıkıcı (destructor)— bir araya getiriyor.
Üç dosya oluşturacaksınız:
stringobj.h: Tek bir üyeye sahip birStringObjectyapısı (struct) bildirin:char *text(dinamik olarak ayrılmış bir dizgiye işaret eden bir pointer). Ayrıca üç fonksiyon bildirin:create_string— birconst char *girdisi alır ve yeni ayrılmış bir StringObject'e bir pointer döndürürprint_string— birconst StringObject *alır ve saklanan metni görüntülerfree_string— birStringObject *alır ve ayrılan tüm belleği serbest bırakır
STRINGOBJ_Hsembolü ile include guard kullanın.stringobj.c: Her üç fonksiyonu da uygulayın. Yapıcınız (constructor) yapı için bellek ayırmalı, ardından metin için bellek ayırmalı (null sonlandırıcı içinstrlenartı bir eklemeyi unutmayın) ve girdi dizgisini kopyalamalıdır. Yıkıcınız (destructor) ters sırada serbest bırakmalıdır —önce dahilitexttamponu, ardından yapının kendisi. Güvenlik için yıkıcınıza bir NULL kontrolü ekleyin.main.c: Bir dize nesnesi oluşturmak, içeriğini görüntülemek ve ardından düzgün bir şekilde temizlemek için modülünüzü kullanın.
Bir girdi alacaksınız: StringObject'inizde saklanacak bir text string.
Ana dosyanızda, sağlanan metinle bir StringObject oluşturun, içeriğini yazdırın, belleği serbest bırakın ve ardından bir onay mesajı yazdırın.
print_string fonksiyonu şu formatta çıktı vermelidir:
Text: {text}Serbest bıraktıktan sonra şunu yazdırın:
FreedÖrneğin, Hello World girdisi ile çıktı şöyle olacaktır:
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: Giriş metni ile bir StringObject oluşturun
// TODO: print_string kullanarak dizeyi yazdırın
// TODO: free_string kullanarak StringObject nesnesini serbest bırakın
// TODO: Temizlemeyi onaylamak için "Freed" yazdırın
return 0;
}
Object Oriented Programming 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şisi