PDA

View Full Version : سوال: چرا اعضای یک کلاس نمی توانند شی تعریف شده از همان کلاس باشند؟



complexcoding
یک شنبه 27 فروردین 1391, 23:47 عصر
چرا اعضای یک کلاس نمی توانند شی تعریف شده از همان کلاس باشند، مگر آنکه از نوع اشاره گر باشند.???


Class test{

int a;

public:

test *b;

};


با تشکر از دوستان

Ananas
دوشنبه 28 فروردین 1391, 01:42 صبح
خوب نمیشه که! اینجوری بینهایت شی داری! ببین :
یک شی میسازی که خودش یک شی داخلش داره
که اون هم یک شی داخلش داره
که اون هم یک شی داخلش داره
که اون هم یک شی داخلش داره
که اون هم یک شی داخلش داره
که...
...
راه حلش اینه که یک شی بسازی که در صورت لزوم بتونه یک شی تو خودش داشته باشه و اگه لازم نباشه بتونه اون شی رو نداشته باشه و این کار با اشاره گر انجام میشه. شما میتونی اشاره گر داخل یک شی رو به NULL تنظیم کنی میتونی به آدرس شی دیگه ای و یا خودش تنظیم کنی.

dr.b4ne
دوشنبه 28 فروردین 1391, 13:54 عصر
چرا اعضای یک کلاس نمی توانند شی تعریف شده از همان کلاس باشند، مگر آنکه از نوع اشاره گر باشند.???


Class test{

int a;

public:

test *b;

};


با تشکر از دوستان

سلام به شما دوست عزیز ، سوال خوبی رو مطرح کردید حتما شما میدونید با تعریف یک کلاس تا زمانی که شیئی از اون ساخته نشده فضایی هم از حافظه در گیر نمیشه (چرا؟) اما زمانی که قراره یک شی ایجاد بشه فضایی برابر با مجموع فضای تک تک اعضای کلاس برای اون شی در نظر گرفته میشه مثلا توی کدی که شما نوشتید اگه قرار باشه شیئی از کلاس test ایجاد بشه فضایی برابر با فضای int a بعلاوه ی پوینتر b خواهد داشت حالا فرض کنید اشتباها شیئی از همین کلاس رو به عنوان عضو همین کلاس در نظر بگیریم اون موقع حجم یه شی از این کلاس چقدره ؟! برابر با حجم یه شی از همین کلاس + مقداری ثابت !!!!!

X=x+c !!!!!!!!!!!!!

dr.b4ne
دوشنبه 28 فروردین 1391, 14:26 عصر
چرا اعضای یک کلاس نمی توانند شی تعریف شده از همان کلاس باشند، مگر آنکه از نوع اشاره گر باشند.???


Class test{

int a;

public:

test *b;

};


با تشکر از دوستان

سلام به شما دوست عزیز ، سوال خوبی رو مطرح کردید حتما شما میدونید با تعریف یک کلاس تا زمانی که شیئی از اون ساخته نشده فضایی هم از حافظه در گیر نمیشه (چرا؟) اما زمانی که قراره یک شی ایجاد بشه فضایی برابر با مجموع فضای تک تک اعضای کلاس برای اون شی در نظر گرفته میشه مثلا توی کدی که شما نوشتید اگه قرار باشه شیئی از کلاس test ایجاد بشه فضایی برابر با فضای int a (دو یا چاهر بایت مثلا چهار بایت) بعلاوه ی پوینتر b (دو بایت)خواهد داشت یعنی اگه قرار باشه با کد شما شیئی از کلاس test ساخته بشه شش بایت فضای حافظه رو میگیره حالا فرض کنید این کلاس رو از نو مینویسیم و اشتباها یه شیئی از این کلاس رو عضو خودش قرار میدیم و میخوایم یه شیئی از این کلاس بسازیم ، خب به فرض اینکه کامپایلر به ما گیر نده میسازیم سوالی که مطرح میشه اینه ، سایز شیئی که ساختیم چقدره ؟ از اونجایی که یه شی از نوع خودش تو دل خودش داره بعلاوه متغییر ها ی دیگه سایز شی جدید برابر میشه با سایز خودش بعلاوه یه مقدار دیگه !!!!! شدنیه ؟!!!!
X=x+c !!!!!!!!!!!!! (لطفا به دید ریاضی بهش نگاه کن نه برنامه نویسی !)
اما پوینتر چون سایز متغییری نداره و همیشه دو بایته میتونه تو کلاسی از نوع خودش هم حضور داشته باشه
دوست عزیز با دلایل دیگه ای هم میشه این قضیه رو ثابت کرد اگه لازم شد بگو تا مطرحشون کنم . . .