تنفيذ المستطيل
جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 46 من 61.
التحدي
سهللنواصل بناء مشروع "Shape Drawer" من خلال تنفيذ Rectangle — وهو شكل ملموس آخر يدمج هيكل Shape الأساسي، تماماً كما فعلنا مع الدائرة (Circle).
بناءً على مشروعك الحالي، ستضيف وظائف المستطيل عبر هذه الملفات:
shape.h: احتفظ بواجهةShapeالأساسية مع أنواع مؤشرات الدوالDrawFuncوAreaFuncمن الدروس السابقة.circle.hوcircle.c: احتفظ بتنفيذ الدائرة (Circle) من الدرس السابق.rectangle.h: قم بتعريف هيكلRectangleهنا. يدمج المستطيلShapeكـ عضو أول ويضيف حقليwidthوheight(كلاهما من نوعdouble). قم بالتصريح عن دالة منشئcreate_rectangleتأخذ معلمات العرض والارتفاع وتعيدRectangleبالقيمة.rectangle.c: قم بتنفيذ السلوك الخاص بالمستطيل:draw_rectangle— يطبعDrawing Rectangle with width: X.XX and height: X.XX(كلا القيمتين تظهران بمنزلتين عشريتين)area_rectangle— يعيد العرض × الارتفاعcreate_rectangle— يقوم بتهيئةRectangle، وربط مؤشرات دوالShapeالمدمجة بدوال المستطيل، وتعيين الأبعاد، وإعادة المستطيل
main.c: قم باستعراض عمل كلا الشكلين من خلال نفس الواجهة. اقرأ مدخلين: العرض والارتفاع للمستطيل. أنشئ مستطيلاً باستخدام المنشئ الخاص بك، ثم استدعِ كلاً منdrawوareaمن خلال مؤشرات دوالShapeالمدمجة. اطبع المساحة بمنزلتين عشريتين.
سيتلقى برنامجك مدخلين: قيم width و height (كأرقام فاصلة عائمة).
مثال على المخرجات عندما تكون المدخلات 4.0 و 3.0:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00مثال على المخرجات عندما تكون المدخلات 7.5 و 2.5:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75تماماً كما هو الحال مع الدائرة، يدمج المستطيل Shape كعضو أول له، مما يسمح لك بالوصول إلى مؤشرات الدوال من خلال العضو المدمج. هذا النمط المتسق هو ما يسمح بتعدد الأشكال (polymorphism) — حيث يمكن التعامل مع كلا الشكلين بشكل موحد من خلال واجهة Shape الخاصة بهما. تذكر استخدام حراس التضمين (include guards) في جميع ملفات الترويسة.
جرّب بنفسك
#include <stdio.h>
#include "shape.h"
#include "rectangle.h"
int main() {
double width, height;
scanf("%lf", &width);
scanf("%lf", &height);
// TODO: create_rectangle(width, height) قم بإنشاء مستطيل باستخدام
// TODO: المضمنة Shape من خلال مؤشر الدالة الخاص بـ draw استدعِ
// TODO: المضمنة Shape من خلال مؤشر الدالة الخاص بـ area استدعِ
// TODO: "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مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرة