שאלה על CONST ב C++

  • פותח הנושא NORT
  • פורסם בתאריך

NORT

New member
שאלה על CONST ב C++

אני מגדיר טיפוס מי סוג INT ואני רוצה להגדיר אותו בתור מישתנה קבוע (כמו CONST) אבל ללא איתחול , זאת אומרת אני רוצה לאתחל אותו לערך מסוים בבנאי ומי רגע שאני מאתחל אותו אני רוצה שהוא לא יוכל להישתנות . אני בטוח שאפשר לעסות את זה אבל חיפסתי ב MSDN ואני ממש לא מוצא כלום על זה.אני יודע שאפשר לעסות את זה ב JAVA אבל אני רוצה לעסות את זה C++. תודה על העזרה למי שיודע לעזור.
 

HaRmosh

New member
לפי מיטב ידיעתי, אי אפשר ב-C++

להצהיר על משתנה כ-const ללא איתחול, כשהוא אינו משתנה שהוצהר כ-extern או כשאינו מצביע. מה שכן, אתה יכול לנסות טריק כזה:
class const_int { private: int c_int; public: const_int(int value) { c_int = value; } }​
ובזמן הבניה של האובייקט שלך, תיצור מופע של המחלקה const_int ותעביר לבנאי שלה את הערך שאתה רוצה - והוא לא יוכל להשתנות בזמן הריצה, כי אין שום מתודה ציבורית שמאפשרת זאת.
 

HaRmosh

New member
תוספת קטנה...

כמובן שצריך מתודה ציבורית שתחזיר את הערך של המשתנה, אחרת זה לא שווה הרבה...
 

NORT

New member
אני זוכר שפעם עשיתי משהו כזה..

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

vinney

Well-known member
דרך מצביע

תעשה מצביע למשתנה שלך ותיגש דרכו. דרך מאוד מאוד מכוערת. אם אתה שם את המשתנה ב private/protected, ומשנה אותו רק בבנאי, אתה משיג את המטרה שלך בלי שום טריק, אז מה הבעיה?
 

linuxius

New member
אפשר ברשימת אתחול של ה-Constructor

כנראה שניסתה להציב ערך לקבוע בגוף הבנאי ולא ברשימת האתחול, נסה:
MyClass :: MyClass() : MyConst( Value ) { // body }​
 

shlomistyle

New member
תשובה לשאלה

הייי אנשים אני לא מזמן למדית מספר מיוחד על קונסט ואפשר לעשות את מה שהוא אומר פשוט הוא מגדיר את המאפיין של האובייקט כקונסט ומאתחל אותו ברשימת איתחול כי זו כמובן הדרך היחידה לאתחל אותו מקווה שזה עזר
 

NORT

New member
לא כלכך הבנתי , אתה מיתכוון

לאתחל אותו בבנאי של המחלקה? כי אם כן אז ניסיתי את זה וזה לא עובר קומפילציה . תסביר בבקשה למה אתה מיתכוון .
 

linuxius

New member
הצבת ערך ברשימת האתחול

לבנאי יש תכונה הנקראת רשימת אתחול ומטרותיה: 1) אתחול קבועים (הדרך היחידה) 2) קריאה לבנאי מחלקות הבסיס 3) קריאה לבנאי של אובייקטים מוכלים (אובייקט ולא פוינטר) כדי להשתמש ברשימת האתחול רושמים : אחרי הסוגריים של הפונקציה ולפני }. רושמים את שם האובייקט,קבוע ובתוך סוגריים את הערך לדוגמה, שוב:
MyClass :: MyClass() : MyConst(10) { //body } יאתחל את הקבוע MyConst של המחלקה MyClass לערך 10​
 
למעלה