确定基类指针指向的子类对象

时间:2016-11-28 08:22:56

标签: c++ oop pointers object inheritance

是一种识别基类指向哪个子对象的方法。

例如:

{
    "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 ++方式使用指针解决这个问题。

这可能吗?

2 个答案:

答案 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";
}