مراجعة: String Wrapper
جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 16 من 61.
التحدي
سهللنقم ببناء وحدة StringObject تغلف مصفوفة أحرف مخصصة ديناميكيًا. يجمع هذا التحدي التلخيصي دورة حياة الكائن الكاملة - المنشئ (constructor)، والطريقة المخصصة للقراءة فقط (read-only method)، والمدمر (destructor) - وكلها تعمل معًا لإدارة الذاكرة بأمان.
ستقوم بإنشاء ثلاثة ملفات:
stringobj.h: قم بالتصريح عن هيكلStringObjectمع عضو واحد:char *text(مؤشر إلى سلسلة نصية مخصصة ديناميكيًا). صرح أيضًا عن ثلاث دوال:create_string— تأخذ مدخلاً من نوعconst char *وتعيد مؤشرًا إلى StringObject مخصص حديثًاprint_string— تأخذconst StringObject *وتعرض النص المخزنfree_string— تأخذStringObject *وتحرر جميع الذاكرة المخصصة
STRINGOBJ_H.stringobj.c: قم بتنفيذ الدوال الثلاث جميعها. يجب أن يقوم المنشئ الخاص بك بتخصيص ذاكرة للهيكل، ثم تخصيص ذاكرة للنص (تذكرstrlenزائد واحد للمنتهي الصفري)، ونسخ سلسلة الإدخال. يجب أن يقوم المدمر الخاص بك بالتحرير بترتيب عكسي - مخزنtextالداخلي أولاً، ثم الهيكل نفسه. قم بتضمين فحص NULL في المدمر الخاص بك من أجل السلامة.main.c: استخدم الوحدة الخاصة بك لإنشاء كائن سلسلة، وعرض محتوياته، ثم التنظيف بشكل صحيح.
ستتلقى مدخلاً واحدًا: سلسلة نصية لتخزينها في StringObject الخاص بك.
في ملفك الرئيسي، قم بإنشاء StringObject بالنص المقدم، واطبع محتوياته، وحرر الذاكرة، ثم اطبع رسالة تأكيد.
يجب أن تقوم دالة print_string بالإخراج بهذا التنسيق:
Text: {text}بعد التحرير، اطبع:
Freedعلى سبيل المثال، مع المدخل 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: إنشاء StringObject بنص الإدخال
// TODO: طباعة السلسلة النصية باستخدام print_string
// TODO: تحرير الـ StringObject باستخدام free_string
// TODO: طباعة "Freed" لتأكيد عملية التنظيف
return 0;
}
جميع دروس Object Oriented Programming
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مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرة