English 中文(简体)
检查衍生产品类别
原标题:Check the type of derived class
  • 时间:2012-05-07 13:51:10
  •  标签:
  • c++

在我的方案中,我有一个称为实体的班子。 另一类Invader继承实体。 页: 1 我想有4个不同的入侵者,我宣布从因瓦德继承的班次为Invader1、Invader2、Invader3和Invader4。 现在我宣布成为实体的传导体,储存所有散射器,如:

entities.push_back(new Invader4());
entities.push_back(new Invader3());
entities.push_back(new Invader2());
entities.push_back(new Invader1());
entities.push_back(new Invader0());

当我检查各实体操作时间的元件类型时,即

typeid(*entities->at(index)) 

它可以遣返4类入侵者之一。 在实体中还有继承实体的其他物体。 因此,我只想检查该物体的类型是否为因瓦德,我不想知道该物体是否为因瓦德1、因瓦德2等。

我如何能够做到这一点?

最佳回答

在C++中将有很多办法可以做到这一点,但根本的问题是,一旦你不得不在一个本应是多变的集装箱内开始盘问元素,你可能会放弃使用吗morph的想法。 收集多形态元素的全点是,你可以处理所有这些问题。 因此,如果您有<条码>查询和查询; 意向*>,你只能将其内容作为<条码>处理。 实体*。 如果您认为需要打上某种<代码>。 在<代码>Entity上的类似功能中,你最好不要持有Invader*的集装箱(使用原集装箱的相同点码)。

问题回答

您可检查<代码>动力学-播种和带;Invader*>entities->at(index)回报不NUL (如果点名人没有点到从<代码>Invader衍生的物体,则会形成NUL。)

See thisLink for some documentation.

创建<代码>Invader类别,继承 EntityInvader1,Invader2, 等到Invader

之后,请在<条码>中添加virtual bool IsInvader() const;,false, 载于<条码>, 编号<>Entity和true in Invader

仅问这个问题通常意味着你实际上在你的接口中失去了虚拟功能。

如果有:

if (myEntity->Type() == TypeInvader)
{
  static_cast<Invader*>(myEntity)->invade();
}

你们几乎可以肯定地通过增加内容来证明这一点。

virtual void tryInvade() {/* normally, entities don t invade*/}

* E/CN.6/2009/1。

virtual void tryInvade() {invade(); /*but invaders do!*/}

页: 1

另一种选择是永远不“披露”贵实体的类型。 如果你不希望利用虚拟职能处理类似案件,那么机会就是,你会通过提及这些实体的基级点来储存这些实体,而是作为你实际希望使用的类别点。 这就是说,你只是把实体的类型放在一边,而不是在以后要求它。 这可能是你 t使用遗产的标志,因为你会违反liskov替代原则





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签