مراجعة: Calculator Dispatch
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 37 من 61.
التحدي
سهلأنشئ آلة حاسبة باستخدام جدول dispatch. ستنشئ array من مؤشرات إلى function يربط رموز operation بالدوال المقابلة لها، ثم تستخدمه لإجراء العمليات الحسابية.
اكتب برنامجًا يقوم بما يلي:
- ينشئ
typedefباسمOperationلمؤشر إلىfunctionيأخذ معاملين من النوعintوreturns قيمة من النوعint - يعرّف four دوال حسابية:
add: returns a + bsub: returns a - bmul: returns a * bdivide: returns a / b (قسمة صحيحة)
- داخل
main، ينشئ جدول dispatch: array من 4 مؤشراتOperationإلىfunction، حيث يكون الفهرس 0 هو add، والفهرس 1 هو sub، والفهرس 2 هو mul، والفهرس 3 هو divide - يقرأ ثلاثة مدخلات: عددين صحيحين ورمز
operation(0-3) - يستخدم رمز
operationللفهرسة داخل جدول dispatch واستدعاء الدالة المناسبة - يطبع النتيجة
ستتلقى ثلاثة مدخلات: العدد الأول، والعدد الثاني، ورمز operation (0 من أجل add، و1 من أجل sub، و2 من أجل mul، و3 من أجل divide).
يجب أن يكون إخراجك عددًا صحيحًا واحدًا: نتيجة العملية:
7في هذا المثال، مع المدخلات 10 و3 و1: يختار رمز operation 1 الدالة sub من جدول dispatch، لذلك نحسب 10 - 3 = 7.
النقطة الأساسية هنا هي استخدام فهرسة array لاختيار الدالة: لا حاجة إلى عبارات if أو switch. يجب أن يبدو جدول dispatch لديك كما يلي:
Operation ops[4] = {add, sub, mul, divide};ثم استدعِ الدالة باستخدام: ops[code](a, b)
جرّب بنفسك
#include <stdio.h>
// TODO: أنشئ typedef يسمى 'Operation' لمؤشر دالة
// تأخذ معاملين من نوع int وتُرجع int
// TODO: عرّف الدوال الحسابية الأربع: add, sub, mul, divide
int main() {
// اقرأ المدخلات
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: أنشئ جدول التوزيع (مصفوفة من 4 مؤشرات دوال من نوع Operation)
// Operation ops[4] = { ... };
// TODO: استخدم رمز العملية لاستدعاء الدالة المناسبة
// واخزن النتيجة
int result;
// اطبع النتيجة
printf("%d\n", result);
return 0;
}جميع دروس البرمجة كائنية التوجه
1أساسيات البرمجة التركيبية
ملفات الترويسةحواجز التضمينملفات المصدرالدوال الساكنةمراجعة: آلة حاسبة تركيبية4التغليف (Encapsulation)
مفهوم الـ Opaque Pointersتعريف الـ Opaque Structsالـ Getters والـ Settersالتحقق من البيانات في الـ Settersملخص: الصندوق السري7مؤشرات الدوال
التصريح عن مؤشرات الدوالاستدعاء مؤشرات الدوالاستخدام Typedef لمؤشرات الدوالتمرير الدوال كوسطاءمراجعة: Calculator Dispatch2الكائنات والأساليب
الـ Structs ككائناتمؤشر 'Self'صحة استخدام Constالمؤشر مقابل القيمةالأساليب المساعدةملخص: Point Manager5مشروع: حساب بنكي بسيط
إعداد المشروعتنفيذ الحساب3دورة حياة الكائن
نمط المنشئ (Constructor Pattern)نمط الهادم (Destructor Pattern)تهيئة الـ Stackالنسخ العميق (Deep Copy)مراجعة: String Wrapper6الوراثة عبر التركيب
تضمين الـ Structقاعدة العضو الأولالوصول إلى أعضاء الأبعملية الـ Upcastingمراجعة: هرمية الأشكال9مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرةتنفيذ المستطيلاستخدام تعدد الأشكالحاوية الأشكالتدرّب بنفسك: مترجم C عبر الإنترنت