בעיה ב ++C

אלדד28

New member
Hey hey, welcome back ../images/Emo8.gif

ותודה על התיקון - אני צריך אותו היום, APPARENTLY
אבל בעצם, אחרי שאני חושב על זה, למה ל-CTOR-ים של האב יהיה אפשר? הקוד הזה -
CString(something)​
באמת יוצר אובייקט זמני שלא "נוחת" בשום מקום. אם CString יורש מ-CObject (נניח), למה שהקוד הבא יעשה משהו? (בהינתן שהוא ב-COPY CTOR של CString) -
CObject(something)​
הרי זה אותו עיקרון, לא? כלומר, נוצר CObject ולא "נוחת" בשום מקום. בקיצור - אני חוזר להודעה המקורית שלי - השתמשו ב-Init list ולא בקריאה מפורשת.
 
זה לא מה שהתכוונתי

התכוונתי, אם לא היה ברור, שאפשר לקרוא *רק* ל-CTORS של האב, וזאת - רק דרך BASE INIT LIST:
CChild::CChild() : CBase(...) {...}​
 

חובבן

New member
כי זאת פונקצונאליות מתבקשת

בהרבה מאד מקרים יש ל class אחד כמה קונסטראקטורים, ויש לוגיקה משותפת שכולם חייבים לבצע. נכון שכולם יכולים לקרוא לפונקציה נוספת, אבל זה שובר כללים של const וכו'. היה טוב אם היה ניתן לעשות משהוא כזה
class A { public: A(): m_x(0),m_y(17) {}; A(const int y): A(), m_y(y) {} private: const int m_x; const int m_y; }​
 

אלדד28

New member
זה לא היום שלי ../images/Emo6.gif

עכשיו הבנתי את מה שאינגו כתב. נו, מילא. וכן, יש מקרים שבהם לא יעזור כלום וצריך לשכפל קוד, אתה צודק. מצד שני, אני לא יכול לחשוב על מקרים נוספים מעבר ל-const. יש עוד?
 

גיל14

New member
נפתח מועדון של אלה שזה לא היום שלהם

שני חברים בינתיים... לגבי הדוגמאות, זה לא ממש הולך ככה...זה צץ לך בדיוק בזמן שאין לך כוח לכתוב את זה בפורום =) חוק מרפי חי וקיים.
 
כמובן

כאשר ה-MEMBERS הם אובייקטים, ולא לכולם יש DEFAULT CTOR. אזי חייבים לציין אותם ב-BASE LIST. זה מקרה קצת יותר "פופולרי" מ-CONST...
 

אלדד28

New member
נכון, אבל...

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

Metheny

Member
....

הקריאה היא ל-CTOR, אבל האובייקט שנוצר כתוצאה מכך נעלם מיד לאחר השורה הזאת. כלומר, לא עושים איתו כלום.
 
למעלה