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

وراثت یکی از قابلیت‌های اصلی یک زبان برنامه‌نویسی شیءگرا محسوب می‌شود. وراثت به توسعه‌دهندگان امکان می‌دهد که یک کلاس جدید را از روی کلاس موجود بسازند. کلاس مشتق شده، ویژگی‌های کلاس مبنا (یعنی کلاس موجود) را به ارث می‌برد. مدل‌های مختلفی از وراثت در زبان برنامه‌نویسی ++C وجود دارند که در ادامه این مقاله آن‌ها را معرفی خواهیم کرد.

وراثت چند سطحی در ++C

در زبان ++C نه تنها می‌توان یک کلاس را از کلاس مبنا به ارث بُرد، بلکه می‌توان یک کلاس را از یک کلاس مشتق شده نیز مشتق کرد. این شکل از وراثت به نام وراثت چند سطحی خوانده می‌شود.

در کد فوق کلاس B از کلاس مبنای A مشتق شده است و کلاس C نیز از کلاس B مشتق شده است.

مثال 1: وراثت چند سطحی در ++C

خروجی
در این برنامه کلاس 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 ارث‌بری کرده است. این کار معناداری محسوب می‌شود، زیرا خفاش یک پستاندار و همچنین از دسته پستانداران بالدار است.

وراثت چندگانه، چند سطحی و سلسله مراتبی در ++C

مثال 2: وراثت چندگانه در زبان برنامه‌نویسی ++C

خروجی

ابهام در وراثت چندگانه

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

این مشکل را می‌توان با استفاده از تابع شفاف‌سازی دامنه که مشخص می‌کند کدام تابع به کلاس base1 و یا base2 تعلق دارد، قابل حل است.

وراثت سلسله مراتبی در ++C

اگر بیش از یک کلاس از کلاس مبنا ارث‌بری بکنند، این کار به نام «وراثت سلسله مراتبی» (hierarchical inheritance) خوانده می‌شود. در وراثت سلسله مراتبی همه ویژگی‌های موجود در کلاس‌های فرزند در کلاس مبنا وجود دارند. برای نمونه فیزیک، شیمی، زیست‌شناسی از کلاس علوم پایه مشتق شده‌اند.

ساختار وراثت سلسله مراتبی

بدین ترتیب به پایان این بخش از سری مقالات راهنمای جامع ++C می‌رسیم. برای مطالعه بخش بعدی روی لینک زیر کلیک کنید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

میثم لطفی (+)

«میثم لطفی» دانش‌آموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار نیز با مجله فرادرس همکاری دارد.

بر اساس رای 1 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *