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

ملخص - حاسبة الأشكال

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

challenge icon

التحدي

سهل

لنُنشئ حاسبةً للأشكال تجمع كل ما تعلمته عن تعدد الأشكال. ستنشئ فئة مجردة Shape وتنفّذ أشكالًا ملموسة تحسب المساحة والمحيط، مع إتاحة الوصول إليها جميعًا من خلال واجهة مشتركة.

ستنظّم التعليمات البرمجية عبر أربعة ملفات:

  • Shape.h: عرّف فئة مجردة Shape تعمل كمخطط لجميع الأشكال. يجب أن تحتوي الفئة الأساسية على:
    • عضو std::string name من النوع protected لتحديد الشكل
    • دالة constructor تهيّئ الاسم
    • دالتَي method افتراضيتين نقيتين area() وperimeter() تُرجعان double
    • دالة getName() تُرجع اسم الشكل
    • دالة destructor افتراضية
  • Circle.h: نفّذ فئة Circle ترث من Shape:
    • عضو خاص double radius
    • دالة constructor تستقبل نصف القطر (اضبط الاسم على "Circle")
    • نفّذ area() باستخدام الصيغة: 3.14159 * radius * radius
    • نفّذ perimeter() باستخدام: 2 * 3.14159 * radius
  • Rectangle.h: نفّذ فئة Rectangle ترث من Shape:
    • عضوا method خاصان double width وdouble height
    • دالة constructor تستقبل العرض والارتفاع (اضبط الاسم على "Rectangle")
    • نفّذ area() على شكل width * height
    • نفّذ perimeter() على شكل 2 * (width + height)
  • main.cpp: اقرأ أربعة inputs (كل واحد في سطر منفصل):
    1. نصف قطر Circle (double)
    2. عرض Rectangle (double)
    3. ارتفاع Rectangle (double)
    4. نصف قطر Circle الثاني (double)

    أنشئ الأشكال الثلاثة جميعًا dynamically وخزّنها في array من مؤشرات Shape*. نفّذ Loop عبر المصفوفة، ولكل شكل، اطبع معلوماته بهذا التنسيق:

    <name>:
      Area: <area>
      Perimeter: <perimeter>

    اطبع سطرًا blank بين كل شكل. نفّذ Clean للكائنات المخصّصة dynamically عند الانتهاء.

على سبيل المثال، عند استخدام inputs 5 و4 و6 و3:

Circle:
  Area: 78.5397
  Perimeter: 31.4159

Rectangle:
  Area: 24
  Perimeter: 20

Circle:
  Area: 28.2743
  Perimeter: 18.8495

لاحظ كيف تعمل منطقية printShapeInfo نفسها مع أي نوع من الأشكال. هذه هي قوة تعدد الأشكال. تعالج شيفرتك الدوائر والمستطيلات بالطريقة نفسها من خلال واجهة Shape، ويعرف كل شكل كيفية حساب قياساته الخاصة. استخدم الكلمة المفتاحية override مع جميع الدوال التي تجري إعادة تعريفها لضمان صحة تواقيع الدوال.

جرّب بنفسك

#include <iostream>
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"

using namespace std;

int main() {
    // اقرأ المدخلات
    double circleRadius1, rectWidth, rectHeight, circleRadius2;
    cin >> circleRadius1;
    cin >> rectWidth;
    cin >> rectHeight;
    cin >> circleRadius2;

    // TODO: أنشئ مصفوفة من مؤشرات Shape* بثلاثة عناصر
    // Shape* shapes[3];

    // TODO: أنشئ الأشكال ديناميكيًا وخزّنها في المصفوفة
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: مرّ عبر المصفوفة واطبع معلومات كل شكل
    // التنسيق:
    // <name>:
    //   المساحة: <area>
    //   المحيط: <perimeter>
    // (سطر فارغ بين الأشكال، ولكن ليس بعد الأخير)

    // TODO: نظّف الكائنات المخصصة ديناميكيًا
    // delete shapes[i];

    return 0;
}

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

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