H_G_G_I
سه شنبه 14 شهریور 1391, 16:29 عصر
سلام !:قلب:
من یه سوال داشتم .:چشمک:
همون طور که می دونید توی دات نت اگه مثلا یه کلاس داشته باشیم به اسم A و یه لیست از اون داشته باشیم !
می تونیم ابجکت هایی از نوع A و ابجکت ها یی که از A ارث بردن رو تو لیست اضافه کنیم !
بعد می شه با is فهمید که نوع اصلی چیه و با as هم می شه تبدیلش کرد .
مثل این کد ::
static void Main(string[] args)
{
List<Behavior> b = new List<Behavior>();
b.Add(new Behavior());
b.Add(new MyBehavior1());
b.Add(new MyBehavior2());
if (b[1] is MyBehavior1)
{
MyBehavior1 mb1 = b[1] as MyBehavior1;
mb1.Speed = 8;
}
}
public class Behavior
{
public bool Enable;
public int State;
virtual void Update() { }
}
public class MyBehavior1 : Behavior
{
public int Speed;
}
public class MyBehavior2 : Behavior
{
public int Helth;
}
-
حالا من دقیقا می خوام چنین چیزی رو تو سی پلاس داشته باشم .
خودم این کارو کردم ::
-
int _tmain(int argc, _TCHAR* argv[])
{
system("PAUSE");
std::vector<Behavior*> b;
b.push_back(new Behavior);
b.push_back(new MyBehavior1);
b.push_back(new MyBehavior2);
//????????????????????
//????????????????????
//????????????????????
system("PAUSE");
return 0;
}
-
برای تبدیل از static_cast استفاده می کنم می شه ولی اگر نوع شی اون چیزی که می خوایم نباشه همه چی بهم می خوره ! من می خوام مثل is عمل کنه که اگه تبدیل نمیشه NULL بده !
فکر کنم با dynamic_cast چنین چیزی بشه اما وقتی ازش استفاده می کنم اینو می گه !
Behavior Is Not polymorphic Type
-
-
چه کنم ؟
من یه سوال داشتم .:چشمک:
همون طور که می دونید توی دات نت اگه مثلا یه کلاس داشته باشیم به اسم A و یه لیست از اون داشته باشیم !
می تونیم ابجکت هایی از نوع A و ابجکت ها یی که از A ارث بردن رو تو لیست اضافه کنیم !
بعد می شه با is فهمید که نوع اصلی چیه و با as هم می شه تبدیلش کرد .
مثل این کد ::
static void Main(string[] args)
{
List<Behavior> b = new List<Behavior>();
b.Add(new Behavior());
b.Add(new MyBehavior1());
b.Add(new MyBehavior2());
if (b[1] is MyBehavior1)
{
MyBehavior1 mb1 = b[1] as MyBehavior1;
mb1.Speed = 8;
}
}
public class Behavior
{
public bool Enable;
public int State;
virtual void Update() { }
}
public class MyBehavior1 : Behavior
{
public int Speed;
}
public class MyBehavior2 : Behavior
{
public int Helth;
}
-
حالا من دقیقا می خوام چنین چیزی رو تو سی پلاس داشته باشم .
خودم این کارو کردم ::
-
int _tmain(int argc, _TCHAR* argv[])
{
system("PAUSE");
std::vector<Behavior*> b;
b.push_back(new Behavior);
b.push_back(new MyBehavior1);
b.push_back(new MyBehavior2);
//????????????????????
//????????????????????
//????????????????????
system("PAUSE");
return 0;
}
-
برای تبدیل از static_cast استفاده می کنم می شه ولی اگر نوع شی اون چیزی که می خوایم نباشه همه چی بهم می خوره ! من می خوام مثل is عمل کنه که اگه تبدیل نمیشه NULL بده !
فکر کنم با dynamic_cast چنین چیزی بشه اما وقتی ازش استفاده می کنم اینو می گه !
Behavior Is Not polymorphic Type
-
-
چه کنم ؟