作者:我是小储哥 | 来源:互联网 | 2022-08-10 07:21
首先dynamic_cast:
代码如下:
#include
using namespace std;
class A{
public:
virtual ~A(){} //使用dynamic_cast时,必要!
};
class B:public A{
public:
B(){
m_b=12;
}
void foo(){
cout<<"B: "< }
private:
int m_b;
};
int main()
{
A *a=new B();
B *b=dynamic_cast(a);
b->foo();
delete a;
return 0;
}
上面没有virtual ~A(){},编译时会报错:(source type is not polymorphic)。
static_cast:
代码如下:
#include
using namespace std;
class A{
public:
A():m_a(32){}
void foo(){
cout<<"A: "< }
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: "< }
private:
int m_b;
};
int main()
{
A *a=new B();
B *b=static_cast(a);
A *aa=static_cast(b);
b->foo();
aa->foo();
delete a;
return 0;
}
打印a、b、aa地址,可知地址一样。