مراجعة: Greeter
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 43 من 61.
التحدي
سهللنبنِ نظام Greeter يوضّح تعدد الأشكال من خلال مؤشرات الدوال: نفس نوع البنية ينتج مخرجات مختلفة استنادًا إلى دالة التحية التي تم ربطها به.
ستنظّم الكود الخاص بك عبر ثلاثة ملفات:
greeter.h: عرّف واجهة greeter هنا. أنشئ نوع مؤشر دالة يُسمىGreetFuncويأخذconst char*(اسمًا لتحيته) ولا يعيد أي قيمة. ثم عرّف بنيةGreeterتحتوي علىlanguage(وهوconst char*) ومؤشر دالةgreetمن النوعGreetFunc.greeter.c: نفّذ دوال التحية التي تمثل لغات مختلفة:greet_english: تطبعHello, name!greet_spanish: تطبعHola, name!
main.c: اجمع كل شيء هنا. أنشئ مثيلين منGreeter، أحدهما للغة English والآخر للغة Spanish، مع ربط كل منهما بدالة التحية الخاصة به. اقرأ اسمًا كمدخل، ثم استدعِ دالةgreetلكلا الكائنين من نوع greeter لإظهار السلوك متعدد الأشكال.
سيستقبل برنامجك مدخلًا واحدًا: اسم لتحيته.
أنشئ greeter للغة English مع ضبط اللغة على English، وgreeter للغة Spanish مع ضبط اللغة على Spanish. لكل greeter، اطبع لغته متبوعة بنقطتين ومسافة، ثم استدعِ دالة greet الخاصة به مع الاسم المُدخل.
مثال على المخرجات عندما يكون الإدخال Maria:
English: Hello, Maria!
Spanish: Hola, Maria!مثال على المخرجات عندما يكون الإدخال Carlos:
English: Hello, Carlos!
Spanish: Hola, Carlos!كلا الـ greeter من النوع نفسه Greeter، ومع ذلك ينتجان تحيات مختلفة لأن لكل منهما دالة مختلفة مُعيّنة لعضو greet الخاص به. تذكّر استخدام حواجز التضمين في ملف الرأس.
جرّب بنفسك
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// اقرأ إدخال الاسم
char name[100];
scanf("%s", name);
// TODO: أنشئ مُرحِّبًا إنجليزيًا
// - عيّن اللغة إلى "English"
// - عيّن greet إلى دالة greet_english
// TODO: أنشئ مُرحِّبًا إسبانيًا
// - عيّن اللغة إلى "Spanish"
// - عيّن greet إلى دالة greet_spanish
// TODO: لكل مُرحِّب:
// 1. اطبع اللغة متبوعة بـ ": "
// 2. استدعِ دالة greet مع الاسم
return 0;
}
جميع دروس البرمجة كائنية التوجه
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مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرةتنفيذ المستطيلاستخدام تعدد الأشكالحاوية الأشكالتدرّب بنفسك: مترجم C عبر الإنترنت