PDA

View Full Version : virtual در ++c



afshinjavad
سه شنبه 01 آبان 1386, 10:32 صبح
سلام.
می خواستم ببینم میشه تو ++c متدهای سازنده(constructor) یا مخرب(distruactor) رو به صورت متد مجازی(virtual) محض تعریف کرد؟
اگه میشه تعریف کرد اصلا به چه دردی می خورند؟
و اگه نمیشه چرا؟

ممنون میشم اگه سوالم رو کاملا توضیح بدید چون من در حال حاضر تو ++c یه آماتورم:چشمک:

emad_67
سه شنبه 01 آبان 1386, 14:58 عصر
سلام
constructor رو نه میشه به صورت vitual تعریف کرد و نه virtual محض چون اصلا یه تابعی رو برای این virtual تعریف میکنیم که بتونیم در کلاس مشتق شده اون رو override کنیم. چون هر کلاسی یه سازنده مخصوص خودش داره و در هنگام ساخت شی از اون کلاس فراخوانی میشه و حالا اگه قرار باشه سازنده کلاس virtual یا virtual محض تعریف بشه یعنی اینکه میخوایم اونو override کنیم که کلا اشتباه هست.
در مورد تخریب کننده کلاس مشکلی وجود نداره و میشه به صورت vitual یا virtual محض تعریف کرد. مثلا فرض کن که یه کلاس پایه و یه کلاس مشتق شده و اشاره گری از کلاس پایه به شی کلاس مشتق شده داریم حلا فرض کن یه جای برنامه به صورت صریح با استفاده از delete بخوایم حافظه اشاره گر رو آزاد کنیم. اگه چنیم کاری رو بکنیم و تخریب کننده کلاس به صورت vitual نباشه فقط قسمتی از شی کلاس پایه نابود میشه و عضو هایی که مربوط به کلاس مشتق شده هستند باقی میمونن ولی اگه تخریب کننده کلاس پایه به صورت virtual باشه این کار باعث میشه که تمام تخریب کننده کلاس های مشتق شده هم به صورت virtual در بیان و وقتی با delete حافظه اشاره گر کلاس پایه رو بخوایم آزاد کنیم این دفعه تخریب کننده شی کلاس مشتق شده فراخوانی میشه( به جای تخریب کننده کلای پایه) و همونطور که میدونیم با فراخوانی تخریب کننده شی کلاس مشتق شده، تخریب کننده کلاس پایه هم به طور اتوماتیک فراخوانی میشه و کل شی رو نابود میکنه. و به همین دلیل میشه تخریب کننده رو به صورت virtual تعریف کرد.

seyedof
پنج شنبه 03 آبان 1386, 09:48 صبح
سلام
در واقع معمولا destructor رو به صورت virtual تعریف میکنند.
ممنون علی

afshinjavad
دوشنبه 07 آبان 1386, 14:32 عصر
ممنون از راهنماییتون.خودمم به همین جوابا رسیدم.اینا هم نمونه اسلایدایی که در تایید صحبت دوستان و برای مثال می زارم تا بقیه هم استفاده کنن.
در اسلاید اول خرب کلاس پایه فراخوانی نمی شه ولی در اسلاید دوم چون اشاره گر از جنس کلاس پاییه تعریف شده مخرب اونم اجرا می شه.
یا علی

molla652003
دوشنبه 07 آبان 1386, 22:18 عصر
جفتش عین هم بودن که !