שיעורי מודול (1/2)
ירושה ב-C++
ירושה היא אחד מעמודי התווך המרכזיים של תכנות מונחה עצמים (OOP). הוא מאפשר למחלקה חדשה (הנקראת מחלקה הנגזרת או הילדה) לרשת חברים (תכונות ושיטות) ממחלקה קיימת (הנקראת מחלקה בסיס או אב), ומקדם שימוש חוזר בקוד.
תחביר בסיסי
ב-C++, הירושה מוגדרת באמצעות האופרטור : אחרי שם המחלקה הנגזרת, ואחריו מפרט גישה (בדרך כלל public) ושם מחלקת הבסיס.
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חברים במחלקה הבסיסית אינם נגישים מבחוץ, אך הם נגישים ישירות בתוך מחלקות נגזרות.
אתחול מחלקות בסיס
הבנאים אינם עוברים בירושה אוטומטית. כאשר מייצרים מחלקה נגזרת, בנאי מחלקות הבסיס נקרא ראשון. אם מחלקת הבסיס דורשת ארגומנטים, עלינו להפעיל אותה במפורש ברשימת מאתחול החברים של הבנאי הנגזר.
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;
}
};נסה זאת בעצמך
צור כיתת כלב שיורשת באופן פומבי מהכיתה החיה. המחלקה Dog חייבת לכלול שיטה ציבורית play() שמדפיסה 'Playing' באמצעות std::cout.
הצג רמז
השתמש בתחביר `:` ואחריו `public Animal` כדי להרחיב את מחלקת הבסיס, ולאחר מכן כתוב את שיטת `play()`.
הפתרון זמין לאחר 3 ניסיונות
השלם את שיעור המכוניות על ידי ירושה מהרכב. כתוב בנאי עבור מכונית שמקבל std::string b ומעביר אותו לבונה הרכב דרך רשימת אתחול החברים.
הצג רמז
בבנאי `Car`, השתמש בתחביר `: Vehicle(b)` מיד אחרי סוגריים של הפרמטרים כדי להאציל את האתחול של המותג למחלקה הבסיסית.
הפתרון זמין לאחר 3 ניסיונות