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