读书人

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

发布时间: 2013-08-14 14:27:55 作者: rapoo

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


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

读书人网 >C++

热点推荐