时间:2021-05-20
首先dynamic_cast:
复制代码 代码如下:
#include <iostream>
using namespace std;
class A{
public:
virtual ~A(){} //使用dynamic_cast时,必要!
};
class B:public A{
public:
B(){
m_b=12;
}
void foo(){
cout<<"B: "<<m_b<<endl;
}
private:
int m_b;
};
int main()
{
A *a=new B();
B *b=dynamic_cast<B*>(a);
b->foo();
delete a;
return 0;
}
上面没有virtual ~A(){},编译时会报错:(source type is not polymorphic)。
static_cast:
复制代码 代码如下:
#include <iostream>
using namespace std;
class A{
public:
A():m_a(32){}
void foo(){
cout<<"A: "<<m_a<<endl;
}
void setA(int a){
m_a=a;
}
private:
int m_a;
};
class B:public A{
public:
B(){
m_b=12;
setA(13);
}
void foo(){
cout<<"B: "<<m_b<<endl;
}
private:
int m_b;
};
int main()
{
A *a=new B();
B *b=static_cast<B*>(a);
A *aa=static_cast<A*>(b);
b->foo();
aa->foo();
delete a;
return 0;
}
打印a、b、aa地址,可知地址一样。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast。 const_cas
Q:什么是C风格转换?什么是static_cast,dynamic_cast以及reinterpret_cast?区别是什么?为什么要注意?A:转换的含义是通过
c++中提供了四种新的强制转换分别是:const_cast、dynamic_cast、reinterpret_cast、static_cast.这四种转换类型,
标准C++包含一个显式的转换语法:static_cast:用于“良性”和“适度良性”的转换,包括不用强制转换const_cast:用于“const”和/或“vo
由于强制转换为引用类型失败,dynamic_cast运算符引发bad_cast异常。语法catch(bad_cast)statement备注bad_cast的接