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

تنفيذ الدائرة

جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 45 من 61.

challenge icon

التحدي

سهل

لنواصل بناء مشروع 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;
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C عبر الإنترنت