بخشی از پاورپوینت
اسلاید 1 :
مبحث:
ارث بری Inheritance
به نام حق
اسلاید 2 :
تعریف:
فرایند ایجاد کلاس های جدید به نام کلاسهای مشتق شده از کلاس موجود یا پایه است.
ویژگیها:
1-کلاس مشتق شده تمام توانایی های کلاس پایه را به ارث می برد اما میتواند تظریف هایی از آن باشد.
2-کلاس پایه بدون تغییر باقی می ماند.
3-ارث بری باعث صرفه جویی در وقت و افزایش اطمینان برنامه میشود.
4-قابلیت استفاده مجدد در توضیع آسان کتابخانه های کلاس .
اسلاید 3 :
کلاس مشتق شده و کلاس پایه:
مثال: این یک نمونه از ارث بری در جامعه دانشگاه است که کلاس های دانشجو و کارمندان از کلاس اعضای جامعه مشتق شده اند و کلاس های استاد و کارمندان اداری از کلاس کارمندان مشتق شده اند.
اسلاید 4 :
کلاس مشتق شده و کلاس پایه
مثال: این یکی نمونه ای از ارث بری در کلاس اشکال است که در آن کلاس های دایره و
مثلث ومستطیل از این کلاس مشتق شده اند.
اسلاید 5 :
نحوه تعريف كلاس مشتق از كلاس پايه
class DerivedClass: public BaseClass
{
//class members
};
class Triangle: public Shape
{
//class members
};
نام كلاس مشتق
نوع ارث بري
نام كلاس پايه
اسلاید 6 :
کلاس مشتق شده و کلاس پایه
اسلاید 7 :
مثال کلاس counter
اسلاید 8 :
توضيح مثال کلاس counter
خط زیر نشان میدهد که این کلاس جدید با دسترسی عمومی از کلاس اول مشتق شده است.
class countDn:public counter
توابع عضو کلاس پایه را می توان به وسیله اشیاء کلاس مشتق مورد دسترسی قرار داد که البته این به قابلیت دسترسی کلاس مشتق باز میگردد.
اسلاید 9 :
ويژگيهاي كلاس مشتق
همانطور كه اشاره شد هنگامي كه يك كلاس از يك كلاس پايه مشتق ميشود باعث ميشود دوباره كاري صورت نگيرد و تمامي رفتارها و ويژگيهاي موجود در كلاس پايه به كلاس مشتق شده انتقال يابد
توجه داشته باشيد كه وقتي شما كلاس جديدي را از يك كلاس پايه مشتق ميكنيد همانند گذشته هيچ گونه شي خاصي ساخته نميشود و تنها كلاس تعريف ميگردد
اسلاید 10 :
ويژگيهاي كلاس مشتق-ادامه
كلاس مشتق شده ميتواند رفتارها و ويژگيهاي ديگري نيز علاوه بر آنچه كه از والد خود به ارث برده است داشته باشد.
مثلاً در مثال شمارنده كلاس مشتق شده يك متد با نام operator– اضافه تر از آنچه كه از كلاس والد به ارث برده دارد.
اسلاید 11 :
انواع ارث بري
در مثالهاي قبل نوع ارث بري مشخص شده از نوع public ميباشد.
انواع ارث بري كه ميتوان براي ساخت كلاس مشتق استفاده كرد عبارتند از:
public
private
protected
اسلاید 12 :
انواع ارث بري
public: در اين نوع ارث بري تمامي متغيرها و توابع عضو public و protected كلاس پايه به همان شكل در كلاس مشتق شده انتقال مي يابند
protected: در اين نوع ارث بري تمامي متغيرها و توابع عضو public و protected كلاس پايه به شكل protected به كلاس مشتق شده انتقال مي يابند
private: در اين نوع ارث بري تمامي متغيرها و توابع عضو public و protected كلاس پايه به شكل privateبه كلاس مشتق شده انتقال مي يابند
اسلاید 13 :
قابلیت دسترسی به متغيرهاي ارث برده شده از كلاس پایه در کلاس مشتق با توجه به نوع ارث بري
اسلاید 14 :
متغيرهاي عضو private در ارث بري چه ميشوند
همانگونه كه از متغيرهاي private عضو يك كلاس انتظار داريم، اين متغيرها بايد از دسترس تمامي كلاسهاي ديگر مخفي بماند
در ارث بري متغير عضو private به كلاس مشتق شده انتقال مي يابد ولي كلاس مشتق شده نميتواند بطور مستقيم با متغير كار كند و بايد از طريق ديگر توابع عمومي كه از كلاس پايه گرفته مقدار عضو را تغيير دهد.
اسلاید 15 :
تمرين
كلاس پايه اي تعريف نموده و يك متغير عضو private با نام pvar براي آن در نظر بگيريد.
توابع get و set را براي متغير بصورت public تعريف نماييد
از روي كلاس پايه يك كلاس مشتق نماييد
تابعي در كلاس مشتق بنويسيد و سعي كنيد بصورت مستقيم مقدار متغير pvar را تغييردهيد.
اسلاید 16 :
اگر برای کلاس مشتق سازنده ای تعریف نشود مثل مثال بالا هنگام ساختن شیء از این کلاس سازنده کلاس پایه به تنهایی صدا زده میشود
اما اگر سازنده ای برای آن تعریف شود و سازنده آن هیچ آرگومانی را دریافت نکند به صورت زیر سازنده ها و سپس مخرب های کلاس پایه و مشتق فراخوانده می شوند:
1-ابتدا سازنده کلاس پایه فراخوانده می شود.
2-سازنده کلاس مشتق صدا زده می شود.
3-هنگام فراخوانی مخرب ها اول مخرب کلاس مشتق اجرا می شود.
4-در انتها مخرب کلاس پایه به اجرا در می آید.
سازنده های کلاس مشتق:
اسلاید 17 :
سازنده های کلاس مشتق
اگر سازنده کلاس پایه آرگومانی را به عنوان ورودی دریافت کند (كلاس پايه سازنده پيش فرض نداشته باشد)
حتماً باید این ورودی در سازنده کلاس مشتق در یافت شده و سازنده كلاس پايه فراخواني شود
نحوه فراخواني سازنده كلاس پايه به صورت زیر، از ( : ) استفاده شود
اسلاید 18 :
همپوشانی توابع عضو:
ویژگی منحصر به فرد دیگری که ارث بری امکان آن را به ما می دهد همپوشانی توابع عضو کلاس های پایه و مشتق است به این معنی که در هر دو کلاس یک تابع با یک اسم مشترک داریم برای مثال در مثال اشکال هم کلاس پایه هم همه ی کلاس های مشتق آن تابع ترسیم را دارند و از آنجایی که اشیاء کلاس مشتق قابلیت صدا زدن توابع عضو کلاس پایه را دارند این سوال پیش می آید که کدام تابع فراخوانی می شود؟
اسلاید 19 :
همپوشانی توابع عضو
خوب جواب اینست که اگر ما هیچ مثل قدیم توابع را تعریف کنیم تابع کلاس مشتق فراخوانده می شود (مثال بالا) اما اگر در کلاس مشتق در هنگام تعریف تابع از (::) استفاده کنیم تابع ازکلاس پایه فراخوانده می شود!
اسلاید 20 :
همپوشانی توابع عضو
در مثال بالا تابع مربوطه با عملگر (::) از کلاس پایه صدا زده شد که البته اگر ورودی داشته باشد به همان روال عادی ورودی ها را نیز در آن می نویسیم.
البته این بحث این جا به پایان نمی رسد ولی فعلاً از آن عبور می کنیم و در چند فصل جلوتر به آن بازمی گردیم و خاصیت اصلی آن را در فصل توابع مجاری بحث می کنیم که بسیار کاربرد دارد و بحث جداگانه ای است.