dynamic_cast的问题
dynamic_cast是被用于安全的沿着类的继承关系向下进行类型转换.
看这个例子:
class Class
{
public:
Class(){
cout << "10" << endl;
}
virtual ~Class(){
cout << "11" << endl;
}
};
class Class_A : public Class
{
public:
Class_A(){
cout << "20" << endl;
}
virtual ~Class_A(){
cout << "21" << endl;
}
};
class Class_B : public Class_A{
public:
Class_B(){
cout << "30" << endl;
}
virtual ~Class_B(){
cout << "31" << endl;
}
};
但为什么这样的转换也会成功:
Class_B *pb = new Class_B;
Class_A *pa = dynamic_cast<Class_A *>(pb);
这样不是向上转换吗?
看这个例子:
class Class
{
public:
Class(){
cout << "10" << endl;
}
virtual ~Class(){
cout << "11" << endl;
}
};
class Class_A : public Class
{
public:
Class_A(){
cout << "20" << endl;
}
virtual ~Class_A(){
cout << "21" << endl;
}
};
class Class_B : public Class_A{
public:
Class_B(){
cout << "30" << endl;
}
virtual ~Class_B(){
cout << "31" << endl;
}
};
但为什么这样的转换也会成功:
Class_B *pb = new Class_B;
Class_A *pa = dynamic_cast<Class_A *>(pb);
这样不是向上转换吗?
...全文
相关推荐
dynamic_cast,static_cast 和 reinterpret_cast
在多态类型的转换中,我们可以使用 dynamic_cast 来检查对象的类型并进行转换。但是,我们需要注意 dynamic_cast 的性能问题,因为它需要在运行时进行类型检查。
C++ dynamic_cast详解[项目代码]
正确使用dynamic_cast可以提升程序的安全性和健壮性,而过度或不当使用则可能导致性能问题和代码复杂性增加。
static_cast与dynamic_cast详解[项目代码]
C++中类型转换是编程中的一项基本操作,主要涉及到两种运算符:static_cast和dynamic_cast。
C++ dynamic_cast与typeid详解[项目代码]
文章中使用了多个代码示例来演示dynamic_cast的实际应用,比如在继承体系中安全地转换对象指针,以及在异常处理中如何利用dynamic_cast捕获类型转换失败的情况。
C++四种cast转换[源码]
C++作为一种支持面向对象、泛型和过程化编程的高效语言,提供了四种主要的类型转换操作符:dynamic_cast、static_cast、const_cast和reinterpret_cast。


