关于C++的强制类型转换浅析
|
dynamic_cast 前三种的强制类型转换,他们能做到的C语言的强制类型转换也大多能做到,最后一种C语言的强制类型转换就没有办法了. 在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。当用于多态类型时,它允许任意的隐式类型转换以及相反过程. 不过,与static_cast不同,在后一种情况里(注:即隐式转换的相反过程),dynamic_cast 会检查操作是否有效. 也就是说,它会检查转换是否会返回一个被请求的有效的完整对象。检测在运行时进行. 如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL. 对于引用 类型,会抛出bad_cast异常 你说这个强转有啥用,其实对于我这种菜鸟还真的没用过,不过我知道一个问题可以使用这样的方法解决. 给你两个类让你分辨那个是子类那个是父类,我们来看看是如何解决的.
#include<iostream>
#include<Windows.h>
#include<assert.h>
using namespace std;
class AA
{
public:
virtual void fun1()
{
cout << "hehe" << endl;
}
public:
int a;
};
class BB :public AA
{
public:
virtual void fun1()
{
cout << "heh2e" << endl;
}
public:
int c;
};
int main()
{
AA* q = new AA();
BB* p = new BB();
AA* a;
BB* b;
b = dynamic_cast<BB*>(q);
if (b == NULL)
{
cout << "AA为基类" << endl;
}
else{
cout << "AA为子类" << endl;
}
a = dynamic_cast<AA*>(p);
if (a == NULL)
{
cout << "BB为基类" << endl;
}
else
{
cout << "BB为子类" << endl;
}
system("pause");
return 0;
}
总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:邯郸站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

