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

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 ;
}

C++程序设计方法3:强制类型转换的更多相关文章

  1. C++的几种强制类型转换

    有时我们希望显式地将对象强制类型转换成另外一种类型.例如,如果想在下面的代码中执行浮点数除法: int i, j; double slope = i / j; 就要使用某种方法将i和/或j显式地转换成 ...

  2. java多态和强制类型转换

    子类可以赋值给超类,称之为向上转型,这个是自动的. 超类不可以赋值给子类,这个是向下转型,需要我们手动实现. 赋值给超类的子类引用在运行期间将表现出不同的特性,这就是多态. 小类型    可转换为   ...

  3. js字符串转换为数字的三种方法。(转换函数)(强制类型转换)(利用js变量弱类型转换)

    js字符串转换为数字的三种方法.(转换函数)(强制类型转换)(利用js变量弱类型转换) 一.总结 js字符串转换为数字的三种方法(parseInt("1234blue"))(Num ...

  4. 【JAVA】笔记(1)---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;

    Java命名规范: 1.包:全部字母小写: 2.类+接口:所有单词的首字母大写: 3.变量+方法:第一个单词的首字母小写,其余单词首字母大写: 3.常量名:所有字母均大写,且用下划线" _ ...

  5. Js中的假值_ES5中定义的ToBoolean方法强制类型转换后值为false

    你不知道的Javascript(中)--ToBoolean javascript中的值可以分为以下两类: 1.可以被强制类型转换为false的值 2.其他(被强制类型转换为true的值) 假值---以 ...

  6. java中强制类型转换时,高位数截取成低位数的方法

    /** * 强制类型转换中的补码.反码.原码一搞清楚 */ int b=233;//正整数强转 System.out.println((byte)b); //负数:原码的绝对值取反再加一 符号为不变 ...

  7. mooc- 基本程序设计方法week1,week2

    学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...

  8. C++中static_cast和dynamic_cast强制类型转换

    在C++标准中,提供了关于类型层次转换中的两个关键字static_cast和dynamic_cast. 一.static_cast关键字(编译时类型检查) 用法:static_cast < ty ...

  9. 谈 JavaScript 中的强制类型转换 (2. 应用篇)

    这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...

随机推荐

  1. 类和JSP关系

    404的原因.除了路径问题,还有文件放置位置.比如如果文件在web-inf下面.浏览器是访问不到的

  2. sqoop的基本语法详解及可能遇到的错误

    1 sqoop介绍 Apache Sqoop是专为Apache Hadoop和结构化数据存储如关系数据库之间的数据转换工具的有效工具.你可以使用Sqoop从外部结构化数据存储的数据导入到Hadoop分 ...

  3. mysql 5.7 安装

    linux(CentOS6.7) 环境Mysql 5.7.17安装教程分享给大家,供大家参考,具体内容如下: 1系统约定 安装文件下载目录:/data/software Mysql目录安装位置:/us ...

  4. XShell发送命令到全部会话

  5. 【回顾】html链接、头部

    1.HTML 链接 HTML 使用超级链接与网络上的另一个文档相连.几乎可以在所有的网页中找到链接.点击链接可以从一张页面跳转到另一张页面. HTML 超链接(链接) HTML使用标签 <a&g ...

  6. bzoj3769 spoj 8549 BST again

    题解: 比较水的题目 普通dp其实复杂度还是比较大的 可以任意模数ntt优化.. 但好像没人写.. 代码: #include <bits/stdc++.h> using namespace ...

  7. Codeforces 542A Place Your Ad Here

    Place Your Ad Here 把没用的第一类区间去掉之后, 排序, 然后枚举第二类区间, 在上面死命二分就好了. #include<bits/stdc++.h> #define L ...

  8. 通过mysql-proxy映射外网访问内网数据库

    配置教程: 转自:http://www.centoscn.com/mysql/2015/0107/4437.html centos安装mysql-proxy mysql-proxy的用处就不再说了 m ...

  9. 2018-03-11 20165235祁瑛《Java程序设计》第二周学习总结

    2018-03-11 20165235祁瑛<Java程序设计>第二周学习总结 教材学习内容总结 第二章要点: 在这一章中我学到了很多东西: (1)布尔类型boolean,布尔类型的赋值只能 ...

  10. day64 django django零碎知识点整理

    本文转载自紫金葫芦,哪吒,liwenzhou.cnblog博客地址 简单了解mvc框架和MTV框架, mvc是一种简单的软件架构模式: m----model,模型 v---view,视图 c---co ...