Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "به نام حق مبحث: ارث بری Inheritance."— Presentation transcript:

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

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

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

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

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 قابلیت دسترسی به متغيرهاي ارث برده شده از كلاس پایه در کلاس مشتق با توجه به نوع ارث بري
Access specify Accessible from Own Class Derived Class Object Outside Class Public yes Protected no Private

14 متغيرهاي عضو private در ارث بري چه ميشوند

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

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

17 سازنده های کلاس مشتق اگر سازنده کلاس پایه آرگومانی را به عنوان ورودی دریافت کند (كلاس پايه سازنده پيش فرض نداشته باشد) حتماً باید این ورودی در سازنده کلاس مشتق در یافت شده و سازنده كلاس پايه فراخواني شود نحوه فراخواني سازنده كلاس پايه به صورت زیر، از ( : ) استفاده شود Derived::Derived(int g):Base(g) } .... {

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

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

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

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

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

23 ارث بری چند گانه: در صورتی که یک کلاس از 2 یا چند کلاس مشتق شده باشد می گوییم ارث بری چند گانه بوده یعنی از چند کلاس ارث بری داشته و به صورت زیر آن را تعریف می کنیم: class Derived : public Base1 , public Base2 , ….

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

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

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

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

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

29 #include <conio.h>
#include <stdio.h> class Base1 { public: Base1() printf("\nBase1 Constructor"); } ~Base1() printf("\nBase1 Distructor"); }; class Base2 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;

30

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

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

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

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


Download ppt "به نام حق مبحث: ارث بری Inheritance."

Similar presentations


Ads by Google