مراجعة: Greeter
جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 43 من 61.
التحدي
سهللنقم ببناء نظام Greeter يوضح تعدد الأشكال (polymorphism) من خلال مؤشرات الدوال (function pointers) — حيث ينتج نفس نوع الـ struct مخرجات مختلفة بناءً على دالة الترحيب المرتبطة به.
ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات:
greeter.h: قم بتعريف واجهة الترحيب الخاصة بك هنا. أنشئ نوع مؤشر دالة يسمىGreetFuncيأخذconst char*(الاسم المراد الترحيب به) ولا يعيد شيئاً. ثم قم بتعريف struct باسمGreeterيحتوي علىlanguage(من نوعconst char*) ومؤشر دالةgreetمن نوعGreetFunc.greeter.c: قم بتنفيذ دوال الترحيب التي تمثل لغات مختلفة:greet_english— يطبعHello, name!greet_spanish— يطبعHola, name!
main.c: اجمع كل شيء معاً هنا. أنشئ مثيلين (instances) منGreeter— أحدهما للغة الإنجليزية والآخر للغة الإسبانية — كل منهما مرتبط بدالة الترحيب الخاصة به. اقرأ اسماً كمدخل، ثم استدعِ دالةgreetلكل من المرحبين لإظهار سلوك تعدد الأشكال.
سيتلقى برنامجك مدخلاً واحداً: الاسم المراد الترحيب به.
أنشئ مرحباً إنجليزياً مع ضبط اللغة على English ومرحباً إسبانياً مع ضبط اللغة على Spanish. لكل مرحب، اطبع لغته متبوعة بنقطتين ومسافة، ثم استدعِ دالة greet الخاصة به مع الاسم المدخل.
مثال على المخرجات عندما يكون المدخل Maria:
English: Hello, Maria!
Spanish: Hola, Maria!مثال على المخرجات عندما يكون المدخل Carlos:
English: Hello, Carlos!
Spanish: Hola, Carlos!كلا المرحبين هما من نفس النوع Greeter، ومع ذلك فإنهما ينتجان تحيات مختلفة لأن لكل منهما دالة مختلفة مخصصة لعضو greet الخاص به. تذكر استخدام حراس التضمين (include guards) في ملف الرأس (header file) الخاص بك.
جرّب بنفسك
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// قراءة الاسم المدخل
char name[100];
scanf("%s", name);
// TODO: إنشاء مٌرحب باللغة الإنجليزية
// - تعيين language إلى "English"
// - تعيين greet إلى دالة greet_english
// TODO: إنشاء مٌرحب باللغة الإسبانية
// - تعيين language إلى "Spanish"
// - تعيين greet إلى دالة greet_spanish
// TODO: لكل مٌرحب:
// 1. طباعة language متبوعة بـ ": "
// 2. استدعاء دالة greet مع name
return 0;
}
جميع دروس Object Oriented Programming
1أساسيات البرمجة التركيبية
ملفات الترويسةحواجز التضمينملفات المصدرالدوال الساكنةمراجعة: آلة حاسبة تركيبية4التغليف (Encapsulation)
مفهوم الـ Opaque Pointersتعريف الـ Opaque Structsالـ Getters والـ Settersالتحقق من البيانات في الـ Settersملخص: الصندوق السري2الكائنات والأساليب
الـ Structs ككائناتمؤشر 'Self'صحة استخدام Constالمؤشر مقابل القيمةالأساليب المساعدةملخص: Point Manager5مشروع: حساب بنكي بسيط
إعداد المشروعتنفيذ الحساب8تعدد الأشكال (Polymorphism)
مؤشرات الدوال في الـ Structsمحاكاة الـ Methodsمفهوم الـ Interfaceتنفيذ الـ Interfacesالتكرار متعدد الأشكالمراجعة: Greeter3دورة حياة الكائن
نمط المنشئ (Constructor Pattern)نمط الهادم (Destructor Pattern)تهيئة الـ Stackالنسخ العميق (Deep Copy)مراجعة: String Wrapper6الوراثة عبر التركيب
تضمين الـ Structقاعدة العضو الأولالوصول إلى أعضاء الأبعملية الـ Upcastingمراجعة: هرمية الأشكال9مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرة