【发布时间】:2016-11-28 08:22:56
【问题描述】:
是一种识别基类指向哪个子对象的方法。
例如:
class Base
{..};
class Child1:public Base
{..};
class Child2:public Base
{..};
void identifyChild(Base *obj)
{
if((Child1*)&obj)//not working
cout<<"child1";
else
cout<<"child2";
}
int main(){
..
identifyChild(&c);// c can be child 1 or child2 ;
..
}
child1 和child2 是继承class base 的两个类。
我想知道如何检查基类指针obj指向的对象是什么类型。
另外, 我想避免使用任何 STL 成员,不使用模板或 typeinfo 标头相关函数,只使用指针解决这个问题,旧的 C++ 方式。
这可能吗?
【问题讨论】:
-
要解决您的问题,请尝试使用
dynamic_cast进行向下转换。 然而这样做通常不是一个好主意,而且往往是糟糕设计的标志。用例是什么?你为什么需要这个?用虚函数不能解决问题吗?您想解决的实际问题是什么(related reading about the XY problem)? -
是否有任何与仅使用指针进行转换相关的解决方案?我想坚持与指针相关的操作,那么有没有这样的方法?根据对象的类型,我将调用不同的函数。但是,我的重点是找出对象指向的类型。不,我不喜欢使用虚函数。
-
我仍然不推荐它,但使用
dynamic_cast向下转换似乎是您想要的(但可能不需要)。 -
好吧,我认为动态演员应该这样做......
标签: c++ oop pointers object inheritance