首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-08-14 
基类 指向派生类的指针能否知道这个指针的 类型基类 指向派生类的指针能否知道这个指针的 类型比如class A

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


比如
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;


    return 0;
}

热点排行