Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة: Greeter

جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 43 من 61.

challenge icon

التحدي

سهل

لنقم ببناء نظام 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