המשימה
זהו התרגיל הראשון בנושא ההורשה. הוא עוסק בדבר אחד בלבד: **דריסה**. נתונה המחלקה Animal, ולה שם ופעולה sound שמחזירה מחרוזת כללית. בנה שתי מחלקות שיורשות מ-Animal: • Dog — sound שלה מחזירה Haw • Cat — sound שלה מחזירה Miau אף אחת מהן לא מוסיפה תכונות. הבנאים כבר כתובים בשבילכם ואין מה לשנות בהם — כל מה שנשאר הוא לדרוס פעולה אחת בכל מחלקה. דוגמאות: Animal בשם Rex → sound מחזיר ... Dog בשם Rex → sound מחזיר Haw Cat בשם Luna → sound מחזיר Miau הנחיות: • הבנאי של כל בן קיים רק כדי להעביר את השם לאב. כשלאב אין בנאי ריק, הבן חייב בנאי משלו שקורא ל-super — אחרת הקוד אפילו לא מתקמפל. לכן הוא נתון מראש, ואין מה לשנות בו. • getName מוגדרת פעם אחת באב ושני הבנים מקבלים אותה כמות שהיא. אין צורך להעתיק אותה. • שים לב למה שקורה במערך בסוף הפעולה הראשית: המשתנה מטיפוס Animal, אבל הפעולה שרצה היא זו של המחלקה האמיתית של האובייקט. זה הרעיון שכל הנושא בנוי עליו.
קוד הפתיחה
using System;
class Animal {
private string name;
public Animal(string name) {
this.name = name;
}
public string GetName() {
return this.name;
}
public virtual string Sound() {
return "...";
}
}
class Dog : Animal {
public Dog(string name) : base(name) { }
// דרוס כאן את Sound כך שתחזיר Haw
}
class Cat : Animal {
public Cat(string name) : base(name) { }
// דרוס כאן את Sound כך שתחזיר Miau
}
class Program {
static void Main() {
Animal a = new Animal("Rex");
Console.WriteLine(a.Sound()); // ...
Dog d = new Dog("Rex");
Console.WriteLine(d.GetName()); // Rex
Console.WriteLine(d.Sound()); // Haw
Cat c = new Cat("Luna");
Console.WriteLine(c.Sound()); // Miau
Animal[] all = { a, d, c };
for (int i = 0; i < all.Length; i++) {
Console.WriteLine(all[i].GetName() + ": " + all[i].Sound());
}
// Rex: ...
// Rex: Haw
// Luna: Miau
}
}
כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.