Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156376
  • 博文数量: 39
  • 博客积分: 1395
  • 博客等级: 中尉
  • 技术积分: 413
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-26 15:07
文章分类

全部博文(39)

文章存档

2012年(5)

2011年(16)

2010年(14)

2009年(4)

我的朋友

分类: C/C++

2011-01-05 20:23:48

我觉得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;
}


阅读(2562) | 评论(1) | 转发(0) |
0

上一篇:类的空指针

下一篇:电话响起

给主人留下些什么吧!~~

chinaunix网友2011-01-06 15:04:14

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com