تارا فایل

پاورپوینت ارث بری Inheritance


مبحث:
ارث بری Inheritance
1
به نام حق

تعریف:
فرایند ایجاد کلاس های جدید به نام کلاسهای مشتق شده از کلاس موجود یا پایه است.

ویژگیها:
1-کلاس مشتق شده تمام توانایی های کلاس پایه را به ارث می برد اما میتواند تظریف هایی از آن باشد.
2-کلاس پایه بدون تغییر باقی می ماند.
3-ارث بری باعث صرفه جویی در وقت و افزایش اطمینان برنامه میشود.
4-قابلیت استفاده مجدد در توضیع آسان کتابخانه های کلاس .

2

کلاس مشتق شده و کلاس پایه:
مثال: این یک نمونه از ارث بری در جامعه دانشگاه است که کلاس های دانشجو و کارمندان از کلاس اعضای جامعه مشتق شده اند و کلاس های استاد و کارمندان اداری از کلاس کارمندان مشتق شده اند.

کلاس مشتق شده و کلاس پایه
مثال: این یکی نمونه ای از ارث بری در کلاس اشکال است که در آن کلاس های دایره و
مثلث ومستطیل از این کلاس مشتق شده اند.

نحوه تعریف کلاس مشتق از کلاس پایه
class DerivedClass: public BaseClass
{
//class members
};
class Triangle: public Shape
{
//class members
};
نام کلاس مشتق
نوع ارث بری
نام کلاس پایه

کلاس مشتق شده و کلاس پایه

مثال کلاس counter
7

توضیح مثال کلاس counter
خط زیر نشان میدهد که این کلاس جدید با دسترسی عمومی از کلاس اول مشتق شده است.
class countDn:public counter

توابع عضو کلاس پایه را می توان به وسیله اشیاء کلاس مشتق مورد دسترسی قرار داد که البته این به قابلیت دسترسی کلاس مشتق باز میگردد.

ویژگیهای کلاس مشتق
همانطور که اشاره شد هنگامی که یک کلاس از یک کلاس پایه مشتق میشود باعث میشود دوباره کاری صورت نگیرد و تمامی رفتارها و ویژگیهای موجود در کلاس پایه به کلاس مشتق شده انتقال یابد
توجه داشته باشید که وقتی شما کلاس جدیدی را از یک کلاس پایه مشتق میکنید همانند گذشته هیچ گونه شی خاصی ساخته نمیشود و تنها کلاس تعریف میگردد

ویژگیهای کلاس مشتق-ادامه
کلاس مشتق شده میتواند رفتارها و ویژگیهای دیگری نیز علاوه بر آنچه که از والد خود به ارث برده است داشته باشد.

مثلاً در مثال شمارنده کلاس مشتق شده یک متد با نام operator– اضافه تر از آنچه که از کلاس والد به ارث برده دارد.

انواع ارث بری
در مثالهای قبل نوع ارث بری مشخص شده از نوع public میباشد.
انواع ارث بری که میتوان برای ساخت کلاس مشتق استفاده کرد عبارتند از:
public
private
protected

انواع ارث بری
public: در این نوع ارث بری تمامی متغیرها و توابع عضو public و protected کلاس پایه به همان شکل در کلاس مشتق شده انتقال می یابند
protected: در این نوع ارث بری تمامی متغیرها و توابع عضو public و protected کلاس پایه به شکل protected به کلاس مشتق شده انتقال می یابند
private: در این نوع ارث بری تمامی متغیرها و توابع عضو public و protected کلاس پایه به شکل privateبه کلاس مشتق شده انتقال می یابند

قابلیت دسترسی به متغیرهای ارث برده شده از کلاس پایه در کلاس مشتق با توجه به نوع ارث بری

متغیرهای عضو private در ارث بری چه میشوند
همانگونه که از متغیرهای private عضو یک کلاس انتظار داریم، این متغیرها باید از دسترس تمامی کلاسهای دیگر مخفی بماند
در ارث بری متغیر عضو private به کلاس مشتق شده انتقال می یابد ولی کلاس مشتق شده نمیتواند بطور مستقیم با متغیر کار کند و باید از طریق دیگر توابع عمومی که از کلاس پایه گرفته مقدار عضو را تغییر دهد.

تمرین
کلاس پایه ای تعریف نموده و یک متغیر عضو private با نام pvar برای آن در نظر بگیرید.
توابع get و set را برای متغیر بصورت public تعریف نمایید
از روی کلاس پایه یک کلاس مشتق نمایید
تابعی در کلاس مشتق بنویسید و سعی کنید بصورت مستقیم مقدار متغیر pvar را تغییردهید.

اگر برای کلاس مشتق سازنده ای تعریف نشود مثل مثال بالا هنگام ساختن شیء از این کلاس سازنده کلاس پایه به تنهایی صدا زده میشود

اما اگر سازنده ای برای آن تعریف شود و سازنده آن هیچ آرگومانی را دریافت نکند به صورت زیر سازنده ها و سپس مخرب های کلاس پایه و مشتق فراخوانده می شوند:
1-ابتدا سازنده کلاس پایه فراخوانده می شود.
2-سازنده کلاس مشتق صدا زده می شود.
3-هنگام فراخوانی مخرب ها اول مخرب کلاس مشتق اجرا می شود.
4-در انتها مخرب کلاس پایه به اجرا در می آید.
سازنده های کلاس مشتق:

سازنده های کلاس مشتق
اگر سازنده کلاس پایه آرگومانی را به عنوان ورودی دریافت کند (کلاس پایه سازنده پیش فرض نداشته باشد)
حتماً باید این ورودی در سازنده کلاس مشتق در یافت شده و سازنده کلاس پایه فراخوانی شود
نحوه فراخوانی سازنده کلاس پایه به صورت زیر، از ( : ) استفاده شود

Derived::Derived(int g):Base(g)
}
….
{

همپوشانی توابع عضو:
ویژگی منحصر به فرد دیگری که ارث بری امکان آن را به ما می دهد همپوشانی توابع عضو کلاس های پایه و مشتق است به این معنی که در هر دو کلاس یک تابع با یک اسم مشترک داریم برای مثال در مثال اشکال هم کلاس پایه هم همه ی کلاس های مشتق آن تابع ترسیم را دارند و از آنجایی که اشیاء کلاس مشتق قابلیت صدا زدن توابع عضو کلاس پایه را دارند این سوال پیش می آید که کدام تابع فراخوانی می شود؟

همپوشانی توابع عضو
خوب جواب اینست که اگر ما هیچ مثل قدیم توابع را تعریف کنیم تابع کلاس مشتق فراخوانده می شود (مثال بالا) اما اگر در کلاس مشتق در هنگام تعریف تابع از (::) استفاده کنیم تابع ازکلاس پایه فراخوانده می شود!

همپوشانی توابع عضو
در مثال بالا تابع مربوطه با عملگر (::) از کلاس پایه صدا زده شد که البته اگر ورودی داشته باشد به همان روال عادی ورودی ها را نیز در آن می نویسیم.

البته این بحث این جا به پایان نمی رسد ولی فعلاً از آن عبور می کنیم و در چند فصل جلوتر به آن بازمی گردیم و خاصیت اصلی آن را در فصل توابع مجاری بحث می کنیم که بسیار کاربرد دارد و بحث جداگانه ای است.

کلاس های تجریدی:
به مثال زیر توجه کنید در این مثال کلاس پایه 3 کلاس مشتق دارد که هر کارمندی عضو یکی از آنها است پس هیچ شیئی از کلاس پایه ایجاد نمی شود و تنها از کلاس های مشتق شیء ایجاد می کنند به این گونه کلاس ها که از آنها هیچ شیئی ایجاد نمی شود کلاس تجریدی گویند که مفهوم دقیق تجرید را نیز در بخش 11 برای شما خواهیم گفت همین قدر بدانید که هیچ گاه نباید از این کلاس ها شیئی ایجاد کنید و تنها مجاز به ایجاد اشیائی از کلاس های مشتق آن هستید!

:public , privateارث بری
تا به حال تنها از حالت ارث بری عمومی استفاده کردیم حال اگر از حالت ارث بری خصوصی استفاده کنیم اشیاء کلاس مشتق دیگر نمی توانند به توابع عضو عمومی کلاس پایه دسترسی پیدا کنند مثال:

Class Derived : private Base

ارث بری چند گانه:

در صورتی که یک کلاس از 2 یا چند کلاس مشتق شده باشد می گوییم ارث بری چند گانه بوده یعنی از چند کلاس ارث بری داشته و به صورت زیر آن را تعریف می کنیم:

class Derived : public Base1 , public Base2 , ….

ارث بری چند گانه
مباحث ارث بری چند گانه شامل بررسی سازنده ها و یک ابهام در این نوع ارث بری و در انتها کلاس های تودر تو می شود.ابتدا از سازنده ها شروع می کنیم:
مثال:
24

سازنده ها در ارث بری چند گانه:
در این گونه ارث بری ها ابتدا سازنده های کلاس های پایه به ترتیب فراخوانده می شود و در آخر نیز دقیقاً عکس فرا خوانی سازنده ها مخرب ها صدا زده می شوند یعنی اول مخرب خود کلاس مشتق بعد مخرب کلاس پایه 2 (در مثال بالا) و در انتها مخرب اولین کلاس پایه !

ابهام در ارث بری چند گانه :
گاهی اوقات پیش می آید که کلاس های پایه دارای یک تابع همنام هستند در حالی که کلاس مشتق دارای آن تابع نیست در این صورت برای کامپایلر این ابهام به وجود می آید که هنگام صدا زدن این تابع بوسیله اشیاء کلاس مشتق کدام تابع فراخوانده می شود که در مثال پایین آورده شده در این مواقع از عملگر (::) استفاده می کنیم.

ابهام در ارث بری چند گانه

ابهام در ارث بری چند گانه
در این مواقع مشکل مثل بالا حل می شود اما گاهی مشکل از این هم پیچیده تر است برای همین پیشنهاد می شود در مسائل جدی تر از ارث بری چند گانه استفاده نکنید از مشکلات جدی تر مثال پایین است:

#include <conio.h>
#include <stdio.h>
class Base1
{
public:
Base1()
{
printf("nBase1 Constructor");
}
~Base1()
{
printf("nBase1 Distructor");
}
};
class Base2
{
public:
Base2()
{
printf("nBase2 Constructor");
}
~Base2()
{
printf("nBase2 Distructor");
}
};
class Derived:public Base1,public Base2
{
public:
Derived()
{
printf("nDerived Constructor");
}
~Derived()
{
printf("nDerived Distructor");
}
};

int main(void)
{

clrscr();
Derived d;

getch();
return 0;
}

ابهام در ارث بری چند گانه
در این مثال هنگام فراخوانی از کلاس مشتق پایانی چون 2 کپی مختلف از این تابع در کلاس های پایه هست برای همین کامپایلر دچار ابهام می شود و خطا می گیرد!

شامل بودن : کلاس های تو در تو
گاهی اوقات می توان به جای ارث بری از کلاس ها تو در تو استفاده کرد یعنی مثلاً یک شیء از کلاس اول در کلاس دوم تعریف کنیم (به عنوان خصوصیت) و سپس از آن استفاده کنیم البته باید داخل توابع آن از آن بهره ببریم و در خارج کلاس آن توابع را ضدا زد.
مثال:

تمارین:
1-سلسله مراتب وراثت برای جامعه دانشگاه را که در بالا آمده بود در نظر بگیرید (شامل دانشجو استاد وکارمند اداری) چهار کلاس مربوطه را پیاده سازی کنید؟
2-برای رده های چهار ضلعی وذوزنقه ومتوازی الاضلاع ومستطیل سلسله مراتب وراثت را بنویسید و چهار ضلعی را به عنوان رده پایه در نظر بگیرید و آن را پیاده سازی نمایید با توابع رسم؟
3-کلاس اشکال را که در بالا توضیح داده شد یک نمونه ساده از یک مثال دقیق به این فرم است:

تمام اشکالی را که میتوانید تصور کنید 2 بعدی و 3 بعدی را بنویسید وسلسله مراتب آن ها را تشکیل دهید و آنها را به عنوان مشتق های کلاس های مشتق پایه اصلی تعریف کنید.
Shape
Tow dimensional shape
Three dimensional shape

تمارین
4-در موارد مختلفی نیاز داریم یک جفت عدد را باهم نگه داری کنیم مثل مختصات یک نقطه کلاس مربوطه را بنویسید حال کلاس پشته2 را از کلاس پشته معمولی مشتق کنید این پشته برای این جفت عدد به کار می رود ضمناً توابع ورودی و خروجی پشته را نیز برای کلاس دوم بنویسید؟

5-یک موسسه در دو نوع مختلف کتاب و نوار ویدئویی محصولات آموزشی خود را ارائه می دهد کلاس های مشتق و کلاس پایه را تعریف کنید ضمناً همه آثار دارای ویژگیهای عنوان و قیمت هستند.


تعداد صفحات : 34 | فرمت فایل : .ppt

بلافاصله بعد از پرداخت لینک دانلود فعال می شود