۴ مطلب با موضوع «برنامه نویسی شی گرا :: ارث بری (Inheritance) :: توابع مجازی (virtual functions)» ثبت شده است

امکانات جدید توابع مجازی

سلام!

در این جلسه می خواهیم با برخی از قابلیت های مربوط به توابع مجازی آشنا شویم. توجّه داشته باشید که قابلیت هایی که در ادامه می خوانید، در c++11 (و بعدتر) وجود دارند.

قابلیت اوّل:

کلاس های موجود در این کد را در نظر بگیرید. فعلا مشکلی در این کد دیده نمی شود؛ اما اگر تابع مجازی موجود در کلاس وارث را تغییر دهید، این تابع دیگر نسخه ی تغییر داده شده ی تابع موجود در کلاس پایه نخواهد بود.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

توابع مجازی مجرد (pure virtual functions)

سلام!

در جلسات پیش با توابع مجازی آشنا شدیم. حالا می خواهیم شما را با توابع مجازی مجرد (یا pure) آشنا کنیم.

تابع مجازی مجرد، تابعی مجازی است که بدنه ندارد. برای این که به کامپایلر بگوییم که تابع مجازی مورد نظر، بدنه ندارد، باید به شکل زیر عمل کنیم؛

virtual void f( Arguments ) = 0;

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

تابع مخرب مجازی (virtual destructor)

سلام!

همان طور که می دانید، تابع مخرب یا destructor به طور پیش فرض در همه ی کلاس ها وجود دارد. چگونگی تغییر آن را نیز در این مطلب توضیح دادیم. حالا می خواهیم همین تابع مخرب را به صورت مجازی تعریف کنیم. برای این کار کافی است کلمه ی virtual را به اوّل اسم تابع مخرب اضافه کنیم. به عنوان مثال Prototype تابع مخرب در کلاس Test به صورت زیر خواهد بود؛

virtual ~Test();

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

چندریختی (polymorphism)

سلام!

در جلسه های قبل یک اشاره گر از جنس کلاس پایه ساختیم و در آن آدرس یک کلاس وارث را ذخیره کردیم. سپس متوجّه شدیم که این اشاره گر تنها توانایی دسترسی به توابع و متغّیر های خود را دارد و هیچ دسترسی ای به عضوهای کلاس وارث ندارد (با این که آدرس کلاس وارث در آن ذخیره شده است). در این جلسه می خواهیم کاری کنیم که این اشاره گر بتواند به برخی از عضوهای کلاس وارث نیز دسترسی داشته باشد.

برای این کار باید تابعی مجازی بسازیم. برای ساخت یک تابع مجازی باید کلمه ی virtual را به ابتدای Prototype آن اضافه کنید. مثلا اگر بخواهید تابعی به نام f را به صورت مجازی بسازید باید به صورت زیر عمل کنید؛

virtual void f( Arguments... );

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی