基类 指向派生类的指针 可不可以知道这个指针的 类型

基类 指向派生类的指针 能否知道这个指针的 类型
基类 指向派生类的指针  能否知道这个指针的 类型


比如
class A
{
}

class b : public a
{
}

class c : pubic a
{
}

void main()
{
   A *P;  //基类指针
   C abc ;// 派生类对象
   P=&abc ; // 基类指针指向派生类

   P ???//这里怎么才能知道我现在P指向的对象是 ,哪个类型 A,B,C中的哪一个??


}
派生类

------解决方案--------------------
用dynamic_cast进行转换。

B *pb = dynamic_cast(p);
如果成功则pb为非空,失败则pb为NUll

C *pc = dynamic_cast(p);
如果成功则pc为非空,失败则pb为NUll
------解决方案--------------------
dynamic_case<Type*>(p);//把指针p转变成Type类指针,如果不能转换,返回值是NULL

P ???//这里怎么才能知道我现在P指向的对象是 ,哪个类型 A,B,C中的哪一个??
---------------------------------------
想知道是哪一个,一个个去试
C* pc = dynamic_case<C*>(P); //这个例子,成功转换
B* pb= dynamic_case<B*>(P); // 转换不成功 ,pb = NULL
------解决方案--------------------
#include <iostream>

class A {
public:
    virtual ~A() { }
    virtual const char *GetClassName() const {
        return "A";
    }
};

class B: public A {
public:
    virtual const char *GetClassName() const {
        return "B";
    }
};

int main(int argc, char *const argv[])
{
    A a;
    B b;

    A *base = &a;
    std::cout << base->GetClassName() << std::endl;

    base = &b;
    std::cout << base->GetClassName() << std::endl;