是一种识别基类指向哪个子对象的方法。
例如:
{
"employee": [{
"id" : 1,
"firstName" : "Lokesh"
},{
"id" : 2,
"firstName" : "bryant"
},{
"id" : 3,
"firstName" : "kobe"
}]
}
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
的2个类。
我想知道如何检查Base类指针obj指向的对象是什么类型。
另外, 我想避免使用任何STL成员,没有模板或类型信息头相关的函数,只使用旧的C ++方式使用指针解决这个问题。
这可能吗?
答案 0 :(得分:1)
您可以在基类中包含虚函数,并为每个返回某种类型信息的继承类覆盖它,或者您可以使用dynamic_cast来测试每种类型。第一个建议是更有效,更不容易出错。
但实际上,您似乎在问如何实施解决方案,而不是告诉我们您要解决的问题是什么,因为我的建议都不是好事。
答案 1 :(得分:0)
添加虚拟课程,告诉你类名如下:
class Base
{
public:
virtual string getClassName() = 0;
};
class Child1 :public Base
{
string getClassName()
{
return string("Child1");
}
};
class Child2 :public Base
{
string getClassName()
{
return string("Child2");
}
};
void identifyChild(Base *obj)
{
if (obj->getClassName() == "child1")
cout << "child1";
else
cout << "child2";
}