الانتقال إلى المحتوى الرئيسي
الوحدة 6 · الدرس 1 من 213/18 في الدورة~12 min
دروس الوحدة (1/2)

الميراث في C++

الوراثة هي إحدى الركائز الأساسية للبرمجة الشيئية (OOP). فهو يسمح لفئة جديدة (تسمى الفئة المشتقة أو التابعة) بوراثة الأعضاء (السمات والأساليب) من فئة موجودة (تسمى الفئة الأساسية أو الأصل)، مما يعزز إعادة استخدام التعليمات البرمجية.

بناء الجملة الأساسي

في لغة C++، يتم تحديد الوراثة باستخدام عامل التشغيل : بعد اسم الفئة المشتقة، متبوعًا بمحدد الوصول (عادةً public) واسم الفئة الأساسية.

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

محدد الوصول: protected

بالإضافة إلى public وprivate، يقدم الوراثة المحدد protected:

  • private أعضاء الفئة الأساسية لا يمكن الوصول إليهم مباشرة من الفئة المشتقة.
  • protected أعضاء الفئة الأساسية لا يمكن الوصول إليهم من الخارج، ولكن يمكن الوصول إليهم مباشرة داخل الفئات المشتقة.

تهيئة الفئة الأساسية

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

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

جربه بنفسك

تمرين#cpp.m6.l1.e1
المحاولات: 0جارٍ التحميل…

قم بإنشاء فئة كلب ترث بشكل علني من فئة الحيوان. يجب أن تتضمن فئة Dog طريقة اللعب العامة () التي تطبع "التشغيل" باستخدام std::cout.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم بناء الجملة `:` متبوعًا بـ`public Animal` لتوسيع الفئة الأساسية، ثم اكتب طريقة `play()`.

الحل متاح بعد 3 من المحاولات

تمرين#cpp.m6.l1.e2
المحاولات: 0جارٍ التحميل…

أكمل فئة السيارة عن طريق الوراثة من السيارة. اكتب منشئًا للسيارة يقبل std::string b وقم بتمريره إلى منشئ السيارة عبر قائمة مُهيئات الأعضاء.

جارٍ تحميل المحرر…
إظهار التلميح

في مُنشئ `Car`، استخدم بناء الجملة `: Vehicle(b)` مباشرةً بعد قوسي المعلمة لتفويض تهيئة العلامة التجارية إلى الفئة الأساسية.

الحل متاح بعد 3 من المحاولات