המשימה
נתונה המחלקה Book עם שתי תכונות פרטיות: כותרת ושנה. השלם אותה כך שתכלול: • בנאי רגיל שמקבל כותרת ושנה. • **בנאי העתקה** — בנאי שמקבל ספר קיים ובונה ממנו ספר חדש עם אותם ערכים. • פעולת setYear שמשנה את השנה. • פעולה sameAs שמקבלת ספר אחר ומחזירה true אם שני הספרים בעלי אותה כותרת ואותה שנה. הנחיות: • השוואת מחרוזות נעשית ב-equals ולא ב-== . השוואה ב-== משווה הפניות, ולכן היא עלולה להחזיר false על שתי מחרוזות זהות. • זו בדיוק הנקודה של התרגיל: `Book b = a;` אינו העתקה — שני השמות מצביעים על אותו עצם, ושינוי דרך אחד נראה גם דרך השני. בנאי העתקה יוצר עצם **חדש**, ולכן שינוי בו אינו משפיע על המקור. • sameAs משווה ערכים, לא הפניות. שני עצמים נפרדים עם אותם ערכים — התשובה true. [טבלה]
קוד הפתיחה
using System;
class Book {
private string title;
private int year;
public Book(string title, int year) {
// אתחל את התכונות
}
/** בנאי העתקה — בונה ספר חדש עם אותם ערכים כמו other. */
public Book(Book other) {
// כתוב את הפתרון כאן
}
public string GetTitle() {
return "";
}
public int GetYear() {
return 0;
}
public void SetYear(int year) {
// עדכן את השנה
}
/** האם שני הספרים בעלי אותה כותרת ואותה שנה. */
public bool SameAs(Book other) {
// כתוב את הפתרון כאן
return false;
}
}
class Program {
static void Main() {
Book a = new Book("Dune", 1965);
Book copy = new Book(a);
Console.WriteLine(a.SameAs(copy)); // True
copy.SetYear(2000);
Console.WriteLine(a.GetYear()); // 1965 — המקור לא נפגע
Console.WriteLine(copy.GetYear()); // 2000
Console.WriteLine(a.SameAs(copy)); // False
Book r = a; // לא העתקה — אותו עצם
r.SetYear(1999);
Console.WriteLine(a.GetYear()); // 1999
Book x = new Book("Dune", 1999);
Console.WriteLine(a.SameAs(x)); // True — ערכים זהים
}
}
כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.