לדלג לתוכן

Copy constructor

מתוך ויקיפדיה, האנציקלופדיה החופשית

בנאי ההעתקה - סוג של פונקציה בתכנות מונחה עצמים שבשפת C היא בעלת אותו שם של המחלקה עליה מבצעים את הפעולה (מהיותה בנאי או Constructor יש לה שם זהה למחלקה המשמשת בה). בנאי ההעתקה יוצר עצם חדש על ידי העתקת מאפייניו ונתוניו מעצם ישן.

מבחינים בין "העתקה רדודה" שמבוצעת על ידי בנאי ההעתקה, ה-copy constructor, האוטומטי של שפת התכנות (כלומר שלאחר שהתוכנית עוברת אינפרטציה (ההדרה) שלבי ההעתקה נהפכים שקופים ומבוצעים לפי שיקולי המערכת מבלי שלמתכנת יש אפשרות לשלוט ולבקר אותה) לבין "העתקה עמוקה", שכדי לחולל אותה נדרש המתכנת ליצור בנאי העתקה משל עצמו בעיקר במקרה של מצביעים. העתקה עמוקה מטפלת בנתונים שאינם אמורים לעבור מעצם לעצם כפי שהם. הדוגמא הבולטת לכך היא מצביעים. אם נסתפק בהעתקה רדודה ונעתיק מצביע אחד מעצם לעצם, יעשו שני עצמים שימוש באותו מצביע. כל שינוי בעצם אחד שבו ישתנה תוכן כתובת הזיכרון המוצבעת (אך לא תשתנה כתובת הזיכרון עצמה) יגרור שינויים בעצם האחר. מצב כזה לרוב אינו רצוי.

בבנאי ההעתקה הקריאה היא כך שההתייחסות היא לקבוע (const) ולא למשתנה (כלומר: const vaule&) המבטיח, שלא נשנה את המשתנה חס ושלום.

דוגמא למימוש בתכנות (++C)

class Person
}

;int age
;string name
;Person* mother

(public Person(const Person& p
}

;age=p.age
;name=p.name
;(mother=new Person(p.mother

{

;{