وراثت چندگانه، چند سطحی و سلسله مراتبی در ++C – راهنمای کاربردی
در این مقاله با مدلهای مختلف وراثت در زبان برنامهنویسی ++C آشنا میشویم. این مدلها شامل وراثت چندگانه، چند سطحی و سلسله مراتبی در ++C هستند. برای مطالعه بخش قبلی این مجموعه مقالات آموزشی روی لینک زیر کلیک کنید:


وراثت یکی از قابلیتهای اصلی یک زبان برنامهنویسی شیءگرا محسوب میشود. وراثت به توسعهدهندگان امکان میدهد که یک کلاس جدید را از روی کلاس موجود بسازند. کلاس مشتق شده، ویژگیهای کلاس مبنا (یعنی کلاس موجود) را به ارث میبرد. مدلهای مختلفی از وراثت در زبان برنامهنویسی ++C وجود دارند که در ادامه این مقاله آنها را معرفی خواهیم کرد.
وراثت چند سطحی در ++C
در زبان ++C نه تنها میتوان یک کلاس را از کلاس مبنا به ارث بُرد، بلکه میتوان یک کلاس را از یک کلاس مشتق شده نیز مشتق کرد.
این شکل از وراثت به نام وراثت چند سطحی خوانده میشود.
در کد فوق کلاس B از کلاس مبنای A مشتق شده است و کلاس C نیز از کلاس B مشتق شده است.
مثال 1: وراثت چند سطحی در ++C
خروجی
Base class content.
در این برنامه کلاس C از کلاس B مشتق میشود که خود از کلاس A مشتق شده است. شیء obj از کلاس C در تابع ()main تعریف شده است. زمانی که تابع ()display فراخوانی شود، ()display در کلاس A اجرا میشود. دلیل این امر آن است که تابع ()display در کلاس C و کلاس B وجود ندارد.
کامپایلر ابتدا تابع ()display را در کلاس C جستجو میکند. از آنجا که تابع در آنجا وجود ندارد، به دنبال تابع در کلاس B میگردد، چون C از B مشتق شده است. از آنجا که تابع ()display در کلاس B نیز وجود ندارد، لذا کامپایلر به دنبال آن در کلاس A میگردد، چون B از A مشتق شده است. اگر تابع ()display در کلاس C وجود داشته باشد، کامپایلر تابع ()display کلاس A را باطل (Override) میکند.
وراثت چندگانه در ++C
در زبان ++C یک کلاس میتواند از بیش از یک والد ارثبری کند. برای نمونه در نمودار زیر میبینیم که کلاس Bat از کلاس مبنای Mammal و WingedAnimal ارثبری کرده است. این کار معناداری محسوب میشود، زیرا خفاش یک پستاندار و همچنین از دسته پستانداران بالدار است.

مثال 2: وراثت چندگانه در زبان برنامهنویسی ++C
خروجی
Mammals can give direct birth. Winged animal can flap.
ابهام در وراثت چندگانه
بدیهیترین مشکل در مورد وراثت چندگانه، در زمان باطل کردن تابع پیش میآید. فرض کنید کلاس مبنا تابع یکسانی دارد که در کلاس مشتق شده باطل نشده است. در این حالت اگر تلاش کنید تابعی که از شیء کلاس مشتق شده بهره میگیرد را فراخوانی کنید، کامپایلر خطایی نشان میدهد. دلیل این خطا آن است که کامپایلر نمیداند کدام خطا را فراخوانی کند. به مثال زیر توجه کنید:
این مشکل را میتوان با استفاده از تابع شفافسازی دامنه که مشخص میکند کدام تابع به کلاس base1 و یا base2 تعلق دارد، قابل حل است.
وراثت سلسله مراتبی در ++C
اگر بیش از یک کلاس از کلاس مبنا ارثبری بکنند، این کار به نام «وراثت سلسله مراتبی» (hierarchical inheritance) خوانده میشود. در وراثت سلسله مراتبی همه ویژگیهای موجود در کلاسهای فرزند در کلاس مبنا وجود دارند. برای نمونه فیزیک، شیمی، زیستشناسی از کلاس علوم پایه مشتق شدهاند.
ساختار وراثت سلسله مراتبی
بدین ترتیب به پایان این بخش از سری مقالات راهنمای جامع ++C میرسیم. برای مطالعه بخش بعدی روی لینک زیر کلیک کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش پیشرفته C++ (شی گرایی در سی پلاس پلاس)
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- وراثت در ++C — راهنمای کاربردی
- کلاس ها و اشیا در ++C — راهنمای جامع
==












