首页 > 代码库 > C++程序设计方法3:强制类型转换
C++程序设计方法3:强制类型转换
强制类型转换(显示转换)
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:强制类型转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。