文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>dynamic_cast 操作符

dynamic_cast 操作符

时间:2011-01-05  来源:dmastery

我觉得c++提供的四个强制类型转换操作符中最有意思的就要数dynamic_cast,其他三个非常简单,不作赘述!
    dynamic_cast 将基类类型的指针或引用转换为同一继承层次中其他类型的引用或指针,与其他的强制类型转换不同的是,dynamic_cast涉及运行时类型检查,如果绑定到引用或指针的对象不是目标类型的对象,则dynamic_cast失败,如果转换指针类型的dynamic_cast失败,则dynamic_cast的值为0, 如果转换引用类型的dynamic_cast失败,则抛出一个bad_cast类型的异常     因此dynamic_cast操作符其实执行两个动作,首先检查转换是否有效,如果无效则进行错误处理,如果有效,进行转换

#include <iostream>
#include <typeinfo>

using namespace std;

class A
{
public:
    virtual void func()
    {
        cout<<"A function"<<endl;
    }

};

class B : public A
{
public:
    virtual void func()
    {
        cout<<"B function"<<endl;
    }
};



指针转换

int main(int argc, char *argv[])
{
    A *pa = new B;
    //A *pa = new A; // error

    if(B* pb1 = dynamic_cast<B*>(pa))
    {
        pb1->func();
    }
    else
    {
        cout<<"convert failed\n";
    }

    return 0;
}


引用转换

int main(int argc, char *argv[])
{
    B b;
    //A b; // error

    A &ra = b;

    try{
        B &rb = dynamic_cast<B&>(ra);
        rb.func();
    }
    catch(bad_cast &ba)
    {
        cout<<"convert failed\n";
    }

    return 0;
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载