码迷,mamicode.com
首页 > 编程语言 > 详细

C++程序设计方法3:强制类型转换

时间:2017-04-01 00:43:49      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:error   bsp   std   log   int   目标   ror   引用   错误   

强制类型转换(显示转换)

dynamic_cast<Dst_Type>(Src_var)

Src_var必须是引用或者指针类型,Dst_Type类中含有虚函数,否则会有编译错误;

若目标类与源类之间没有继承关系,则转化失败,返回空指针(注:失败并不是运行崩溃)

 

static_cast<Dst_Type>(Src_var)

基类对象不能转换为派生类对象,但基类指针可以转换为派生类的指针

 

派生类对象(指针)可以转化为基类的对象(指针)

没有继承关系的类之间,必须具有转换途径才能进行转换(要么自定义,要么是语言语法支持)

#include <iostream>
using namespace std;

class B
{
public:
    virtual void f() {}
};

class D :public B {};
class E {};

int main()
{
    D d1;
    B b1;
    //d1 = static_cast<D> (b1);//error:从基类无法转换回派生类
    b1 = static_cast<B>(d1);
    //b1 = dynamic_cast<B>(d1);//error:被转化的必须是指针或者引用
    B* pb1 = new B();
    D* pd1 = static_cast<D*>(pb1);
    if (pd1)
        cout << "ok" << endl;//基类指针可以转换为派生类的指针
    pd1 = dynamic_cast<D*>(pb1);
    if (pd1)
        cout << "ok" << endl;//基类不可以动态转化为派生类

    D* pd2 = new D();
    B* pb2 = static_cast<B*>(pd2);
    if (pb2)
        cout << "ok" << endl;//ok
    pb2 = dynamic_cast<B*>(pd2);
    if (pb2)
        cout << "ok" << endl;//ok

    E* pe = dynamic_cast<E*>(pb1);
    if (!pe)
        cout << "ok" << endl;//ok

    //pe = static_cast<E*>(pb1);//error:没有继承关系不能转换
    // E e = static_cast<E>(b1);//error:没有提供转换的途径
    return 0;
}

 

C++程序设计方法3:强制类型转换

标签:error   bsp   std   log   int   目标   ror   引用   错误   

原文地址:http://www.cnblogs.com/hujianglang/p/6654210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!