const מצד ימין/שמאל ב ++c

ericcartman1

New member
const מצד ימין/שמאל ב ++c

שאלת טירון ב ++C: אני לומד מהספר של DEITAL שאומר ש CONST מצד ימין של פונקצייה אומר שלא ניתן לשנות את פרטי ה CLASS (כלומר מין סוג של READ ONLY). אבל בהמשך יש פונקצייה שמוגדרת ככה:
const char *Employee::getFirstName() const​
וכתוב: const before return type prevents client from modifying private data האם זה לא תפקידו של ה CONST הימני? מה תפקידו של ה const השמאלי והאם זה קשור לעובדה שמדובר על מצביע ל char? ובכלל, מה תפקידו של const שמאלי? (בהנחה שהבנתי את תפקידו של הימני). תודה.
 

אלדד28

New member
פשוט מאוד.

const אחרי הגדרת הפונקציה אומר שהפונקציה עצמה לא יכולה לשנות member-ים של ה-class, או לקרוא לפונקציה אחרת שאינה מוגדרת כ-const, אם במחלקה עצמה ואם ב-member שלה. const לפני הערך המוחזר אומר שמי שקרא לפונקציה לא יוכל לשנות את תוכן הערך המוחזר. אם אתה מחזיר int זה לא ישנה דבר שכן המשתמש יקבל מספר, by value, ובלי קשר ל-member שלך - אבל אם החזרת * char אתה בעצם חושף את המבנה הפנימי שלך לשינויים מבחוץ - דבר שהוא כמובן לא רצוי.
 

IdanR

New member
ובמקרה הזה...

בהנחה שהמטודה מחזירה מחרוזת המכילה שם פרטי, זה אומר שלא ניתן יהיה מבחוץ לשנות את תוכן המחרוזת, ובכך לפלוש אל תוך הprivate של המחלקה.
 

ericcartman1

New member
תודה, ותוספת...

אז רק שאהיה סגור על העניין: מכיוון שמדובר במצביע צריך לשים את ה CONST על מנת שלא יהיה ניתן לשנות את תוכן המחרוזת מה MAIN (או מאיפה שקראו לפונקצייה). האם יש לשים גם CONST לפונקצייה שמחזירה REFERENCE? (על מנת "לשמור" על ערך מקורי).
 

IdanR

New member
כן..!

אם מדובר במטודה שמחזירה Reference לאובייקט פנימי, שהוא Data Member או לחלופין, פונקציה/מטודה שאליה אתה שולח אובייקט כReference משיקול של לחסוך בזיכרון של העתקת האובייקט ואין בכוונת הפונקציה לשנות אותו.
 
למעלה