C++/הורשה: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Ybungalobill (שיחה | תרומות)
מאין תקציר עריכה
מ תיקון הפורמט של קוד-מקור
שורה 33:
</source>
ברור שכתיבה כזאת תהיה מסורבלת מאוד, במיוחד בהתחשב בעובדה שאנחנו צריכים לממש כל שיטה מחדש מספר רב של פעמים. מנגנון ההורשה מאפשר לנו לקצר את התהליך ולהגדיר מחלקת אוגר קרב שהיא מקרה מיוחד של האוגר הרגיל שלנו. התחביר הוא כזה:
<source lang="cpp">
<div style="direction: ltr;">
class BattleHamster: public Hamster
{
שורה 39:
void Attack(Hamster &pVictim);
}
</divsource>
אוגר הקרב החדש שלנו קיבל בירושה את כל התכונות של האוגר הרגיל, והוסיף להן תכונה חדשה משלו. מכאן אנחנו יכולים להגיד שאוגר קרב הוא '''סוג של אוגר''', שמסוגל לתקוף.
מילת המפתח בהורשה היא "סוג של", או "is a", מכיוון שמחלקה יורשת היא מצב מיוחד של המחלקה המורישה, כמו האוגר ואוגר הקרב.
בשפת CPP ניתן להרחיב את ההורשה ליותר ממחלקה אחת. לדוגמה, נגדיר מחלקת חיות סיביריות, שהמאפיין שלהם הוא היכולת להיכנס לתרדמת חורף. המחלקה תוגדר כך:
<source lang="cpp">
<div style="direction: ltr;">
class CSybirianAnimal
{
שורה 49:
void Hibernate();
}
</divsource>
כעת, אנחנו רוצים להגדיר אוגר קרב סיבירי, שהוא אוגר קרב וגם חיה סיבירית. אנחנו יכולים לרשת את מחלקת אוגר הקרב הסיבירי משתי המחלקות הקודמות שהגדרנו, מחלקת החיה הסיבירית ומחלקת אוגר הקרב, בצורה הבאה:
<source lang="cpp">
<div style="direction: ltr;">
class SybirianBattleHamster: BattleHamster, SybirianAnimal {};
</divsource>
באופן הזה יצרנו את מחלקת אוגר הקרב הסיבירי בשורת קוד אחת, וקיבלנו אוגר קרב שיודע לעשות גם את כל מה שחיה סיבירית יודעת לעשות.