مراجعة: String Wrapper
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 16 من 61.
التحدي
سهللنبنِ وحدة StringObject تغلّف مصفوفة محارف مخصّصة ديناميكيًا. يجمع هذا التحدي للمراجعة دورة حياة الكائن الكاملة، وconstructor، وread-only method، وdestructor، بحيث تعمل جميعها معًا لإدارة memory بأمان.
ستُنشئ ثلاثة ملفات:
stringobj.h: استخدمDeclareلبنيةStringObjectذاتmemberواحد:char *text(وهوpointerإلىstringمخصّصة ديناميكيًا). استخدمDeclareأيضًا لثلاثfunction:create_string: تستقبلconst char *كـinputوتُعيدpointerإلىStringObjectمخصّصة حديثًاprint_string: تستقبلconst StringObject *وتعرض النص المخزّنfree_string: تستقبلStringObject *وتحرّر كلmemoryالمخصّصة
includeguards بالرمزSTRINGOBJ_H.stringobj.c: استخدمImplementلكلfunctionمن الثلاث. يجب أن يخصّصconstructormemoryللبنية، ثم يخصّصmemoryللنص (تذكّرstrlenمضافًا إليه واحد لمحرف الإنهاءnull)، وأن ينسخinputstring. يجب أن يحرّرdestructorبترتيب عكسي: مخزنtextالداخلي أولًا، ثم البنية نفسها. أضف فحصNULLفيdestructorمن أجلsafety.main.c: استخدم وحدتك لإنشاء كائنstring، وعرض محتوياته، ثم إجراء التنظيف بصورة صحيحة.
ستتلقى input واحدًا: text string لتخزينه في StringObject.
في ملفك الرئيسي، أنشئ StringObject باستخدام النص المُ provided، واعرض محتوياته، وحرّر memory، ثم اطبع رسالة تأكيد.
يجب أن تُخرج print_string بالتنسيق التالي:
Text: {text}بعد التحرير، اطبع:
Freedعلى سبيل المثال، مع input هو Hello World، سيكون الناتج:
Text: Hello World
Freedتنسيق الناتج المطلوب:
جرّب بنفسك
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// إزالة السطر الجديد إن وُجد
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
// TODO: Free the StringObject using free_string
// TODO: اطبع "Freed" لتأكيد التنظيف
return 0;
}
جميع دروس البرمجة كائنية التوجه
1أساسيات البرمجة التركيبية
ملفات الترويسةحواجز التضمينملفات المصدرالدوال الساكنةمراجعة: آلة حاسبة تركيبية4التغليف (Encapsulation)
مفهوم الـ Opaque Pointersتعريف الـ Opaque Structsالـ Getters والـ Settersالتحقق من البيانات في الـ Settersملخص: الصندوق السري2الكائنات والأساليب
الـ Structs ككائناتمؤشر 'Self'صحة استخدام Constالمؤشر مقابل القيمةالأساليب المساعدةملخص: Point Manager5مشروع: حساب بنكي بسيط
إعداد المشروعتنفيذ الحساب3دورة حياة الكائن
نمط المنشئ (Constructor Pattern)نمط الهادم (Destructor Pattern)تهيئة الـ Stackالنسخ العميق (Deep Copy)مراجعة: String Wrapper6الوراثة عبر التركيب
تضمين الـ Structقاعدة العضو الأولالوصول إلى أعضاء الأبعملية الـ Upcastingمراجعة: هرمية الأشكال9مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرةتنفيذ المستطيلاستخدام تعدد الأشكالحاوية الأشكالتدرّب بنفسك: مترجم C عبر الإنترنت