使用基类指针确定子类的类型

时间:2014-03-26 19:57:55

标签: c++

有没有办法用基类指针确定子类的类型?

我在类构造函数中声明了一个指针 在.h文件中

baseclass *screen;
构造函数中的

screen = new childclass();

让我们说baseclass有5个不同的子类,在我的程序中,我将指针切换为指向各种子对象,如何确定屏幕当前指向的对象的类型?

3 个答案:

答案 0 :(得分:7)

<强>唐&#39;吨

使用虚拟分派为不同的派生类型实现不同的行为。

答案 1 :(得分:1)

你可以比较typeid的:typeid(somepointer)== typeid(someclass)来找出实例化的实际对象。

答案 2 :(得分:0)

这是你如何做到的。但正如许多其他人所说,这不是正确的做法。派生类应该处理不同的行为。

#include <iostream>
#include <typeinfo>
using namespace std;

class Base{
public:
    virtual void func();
};

class Derived : public Base{
public:
    virtual void func(){
        return;
    }
};

class AnotherDerived : public Base{
public:
    virtual void func(){
        return;
    }
};

int main(){
    Base *dp = new Derived;
    Base *adp = new AnotherDerived;
    cout << typeid(*dp).name() << endl;
    cout << typeid(*adp).name() << endl;
    return 0;
}