تنفيذ الدائرة
جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 45 من 61.
التحدي
سهللنواصل بناء مشروع "Shape Drawer" من خلال تنفيذ Circle — وهو شكل ملموس يدمج هيكل Shape الأساسي ويوفر منطق الرسم والمساحة الخاص به.
بناءً على الأساس الذي وضعناه في الدرس السابق، ستقوم بتوسيع مشروعك بهذه الملفات:
shape.h: احتفظ بواجهةShapeالأساسية من الدرس السابق مع أنواع مؤشرات الدوالDrawFuncوAreaFunc.circle.h: قم بتعريف هيكلCircleهنا. تدمج الدائرةShapeكـ عضو أول (مما يسمح بتطبيق قاعدة العضو الأول للتحويل التصاعدي "upcasting") وتضيف حقلradiusمن نوعdouble. قم بالتصريح عن دالة منشئcreate_circleتأخذ نصف القطر وتعيدCircleبالقيمة.circle.c: قم بتنفيذ السلوك الخاص بالدائرة هنا:draw_circle— يطبعDrawing Circle with radius: X.XX(يظهر نصف القطر بمنزلتين عشريتين)area_circle— يعيد π × radius² (استخدم3.14159لـ π)create_circle— يقوم بتهيئةCircle، وربط مؤشرات دوالShapeالمدمجة لتشير إلىdraw_circleوarea_circle، وتعيين نصف القطر، وإعادة الدائرة
main.c: اجمع كل شيء معاً. اقرأ قيمة نصف القطر كمدخل، وأنشئ دائرة باستخدام المنشئ الخاص بك، ثم استدعِ كلاً منdrawوareaمن خلال مؤشرات دوالShapeالمدمجة. اطبع المساحة بمنزلتين عشريتين.
سيتلقى برنامجك مدخلاً واحداً: قيمة radius (كعدد بفاصلة عائمة).
مثال على المخرجات عندما يكون المدخل 5.0:
Drawing Circle with radius: 5.00
Area: 78.54مثال على المخرجات عندما يكون المدخل 3.5:
Drawing Circle with radius: 3.50
Area: 38.48الفكرة الأساسية هي أن Circle يحتوي على Shape كعضو أول، لذا يمكنك الوصول إلى مؤشرات الدوال من خلال circle.base.draw و circle.base.area (أو أي اسم تطلقه على العضو المدمج). عند استدعاء هذه الدوال، مرر مؤشراً إلى عضو Shape. تذكر استخدام حراس التضمين (include guards) في جميع ملفات الرأس.
جرّب بنفسك
#include <stdio.h>
#include "shape.h"
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: إنشاء دائرة باستخدام create_circle
// TODO: استدعاء draw من خلال مؤشر الدالة الخاص بـ Shape المضمنة
// TODO: استدعاء area من خلال مؤشر الدالة الخاص بـ Shape المضمنة
// وطباعتها بمنزلتين عشريتين: "Area: %.2f\n"
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مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرة