PDA

View Full Version : سوال: نحوه cast کردن مشتق چندگانه در vc++



radium
دوشنبه 20 خرداد 1387, 22:52 عصر
فرض کنید کلاس پایه A نام دارد. کلاسهای B و C از A مشتق شده اند. حالا کلاس D را از کلاسهای B و C مشتق میکنیم. سوال اینجاست که کلاس B و C به راحتی به نوع A تبدیل میشوند. ولی در قسمتی که باید تبدیل D به A صورت گیرد(در کد زیر بخش مربوط به case 4 ) این پیام خطا صادر میشود:


error C2594: 'argument' : ambiguous conversions from 'class D' to 'class A &'

برای رفع این مشکل باید چکار کرد؟ متشکرم.




switch( f )
{
case 1 :
SetA(i, *new A() );
break;
case 2 :
SetA(i, *new B() );
break;
case 3 :
SetA(i, *new C() );
break;
case 4 :
SetA(i, *new D() );
break;
}

mehdi.mousavi
شنبه 22 تیر 1387, 18:05 عصر
فرض کنید کلاس پایه A نام دارد. کلاسهای B و C از A مشتق شده اند. حالا کلاس D را از کلاسهای B و C مشتق میکنیم. سوال اینجاست که کلاس B و C به راحتی به نوع A تبدیل میشوند. ولی در قسمتی که باید تبدیل D به A صورت گیرد(در کد زیر بخش مربوط به case 4 ) این پیام خطا صادر میشود:


error C2594: 'argument' : ambiguous conversions from 'class D' to 'class A &'
برای رفع این مشکل باید چکار کرد؟ متشکرم.




switch( f )
{
case 1 :
SetA(i, *new A() );
break;
case 2 :
SetA(i, *new B() );
break;
case 3 :
SetA(i, *new C() );
break;
case 4 :
SetA(i, *new D() );
break;
}



سلام.
d* رو به C* یا B* باید CAST کنید، یعنی جای *new D() بزنید:


*((C*)(new D()))

البته تا جاییکه براتون امکان داره از multiple inheritance ها دوری کنید، اگر چه در برخی شرایط بسیار کارامد هستن. اما در زبونهایی مثل C# و Java چنین امکانی وجود نداره.