基类 指向派生类的指针 可不可以知道这个指针的 类型
基类 指向派生类的指针 能否知道这个指针的 类型
基类 指向派生类的指针 能否知道这个指针的 类型
比如
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
------解决方案--------------------
基类 指向派生类的指针 能否知道这个指针的 类型
比如
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;