דילוג לתוכן המרכזי
מודול 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 חייבת לכלול שיטה ציבורית play() שמדפיסה 'Playing' באמצעות std::cout.

טוען עורך...
הצג רמז

השתמש בתחביר `:` ואחריו `public Animal` כדי להרחיב את מחלקת הבסיס, ולאחר מכן כתוב את שיטת `play()`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#cpp.m6.l1.e2
ניסיונות: 0טוען...

השלם את שיעור המכוניות על ידי ירושה מהרכב. כתוב בנאי עבור מכונית שמקבל std::string b ומעביר אותו לבונה הרכב דרך רשימת אתחול החברים.

טוען עורך...
הצג רמז

בבנאי `Car`, השתמש בתחביר `: Vehicle(b)` מיד אחרי סוגריים של הפרמטרים כדי להאציל את האתחול של המותג למחלקה הבסיסית.

הפתרון זמין לאחר 3 ניסיונות