وراثت چندگانه و مساله ارث بری الماسی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

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

+1 امتیاز

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

http://www.learncpp.com/cpp-tutorial/118-virtual-base-classes/

سوال شده فروردین 29, 1393  بوسیله ی maryam (امتیاز 338)   12 33 44
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade
کسی که جواب منو نداد.خودم یه مقاله خوب پیدا کردم.لینکشو تو سوال گذاشتم
سلام دوست عزیز!
بهتره در این مورد به جای الماس از واژهٔ لوزی استفاده بشه...

1 پاسخ

+2 امتیاز

فرض کن یک کلاس Base داری :

class Base
{
    void foo();
};

بعد از این کلاس ۲ تا کلاس رو مشق کردی :

class child1 : public Base
{

};
class child2 : public Base
{
    
}

الان هر ۲ تا کلاس child1 , child2 تابع foo رو داخل خودشون دارن

حالا اگر یک کلاس دیگه رو بخوایم از این ۲ تا مشتق کنیم یعنی :

class child3 : public child1,public child2
{
    
};

 

اگر بخوایم از متد foo استفاده کنیم کامپایلر ارور میده چون نیمدونه  از foo داخل child1 باید استفاده کنه یا child2  و خطای ambigous میده

 که اصطلاحا به این مشکل  diamond problem میگن .

برای جل این مشکل بصورت Virtual کلاس های child1 , child2 رو مشتق می کنیم : 

#include <iostream>

class Base
{
public:
    void foo(){}
};

class child1 : public virtual Base
{};
class child2 : public virtual Base
{};

class child3 : public child1,public child2
{};

int main()
{
    child3 c;
    c.foo();\\ok
}

 

پاسخ داده شده خرداد 4, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده شهریور 16, 1393 بوسیله ی BlueBlade
...