zl程序教程

您现在的位置是:首页 >  后端

当前栏目

c++dynamic_cast与static_cast使用方法示例

C++方法 使用 示例 static Dynamic cast
2023-06-13 09:15:12 时间

首先dynamic_cast:

复制代码代码如下:

#include<iostream>
usingnamespacestd;
classA{
   public:
       virtual~A(){}//使用dynamic_cast时,必要!
};
classB:publicA{
   public:
       B(){
           m_b=12;
       }
       voidfoo(){
           cout<<"B:"<<m_b<<endl;
       }
   private:
       intm_b;
};
intmain()
{   
   A*a=newB();
   B*b=dynamic_cast<B*>(a);
   b->foo();
   deletea;
   return0;
}

上面没有virtual~A(){},编译时会报错:(sourcetypeisnotpolymorphic)。

static_cast:

复制代码代码如下:

#include<iostream>
usingnamespacestd;
classA{
   public:
       A():m_a(32){}
       voidfoo(){
           cout<<"A:"<<m_a<<endl;
       }
       voidsetA(inta){
           m_a=a;
       }
   private:
       intm_a;
};
classB:publicA{
   public:
       B(){
           m_b=12;
           setA(13);
       }
       voidfoo(){
           cout<<"B:"<<m_b<<endl;
       }
   private:
       intm_b;
};
intmain()
{   
   A*a=newB();
   B*b=static_cast<B*>(a);
   A*aa=static_cast<A*>(b);
   b->foo();
   aa->foo();
   deletea;
   return0;
}

打印a、b、aa地址,可知地址一样。