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 ;
}
C++程序设计方法3:强制类型转换的更多相关文章
- C++的几种强制类型转换
有时我们希望显式地将对象强制类型转换成另外一种类型.例如,如果想在下面的代码中执行浮点数除法: int i, j; double slope = i / j; 就要使用某种方法将i和/或j显式地转换成 ...
- java多态和强制类型转换
子类可以赋值给超类,称之为向上转型,这个是自动的. 超类不可以赋值给子类,这个是向下转型,需要我们手动实现. 赋值给超类的子类引用在运行期间将表现出不同的特性,这就是多态. 小类型 可转换为 ...
- js字符串转换为数字的三种方法。(转换函数)(强制类型转换)(利用js变量弱类型转换)
js字符串转换为数字的三种方法.(转换函数)(强制类型转换)(利用js变量弱类型转换) 一.总结 js字符串转换为数字的三种方法(parseInt("1234blue"))(Num ...
- 【JAVA】笔记(1)---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;
Java命名规范: 1.包:全部字母小写: 2.类+接口:所有单词的首字母大写: 3.变量+方法:第一个单词的首字母小写,其余单词首字母大写: 3.常量名:所有字母均大写,且用下划线" _ ...
- Js中的假值_ES5中定义的ToBoolean方法强制类型转换后值为false
你不知道的Javascript(中)--ToBoolean javascript中的值可以分为以下两类: 1.可以被强制类型转换为false的值 2.其他(被强制类型转换为true的值) 假值---以 ...
- java中强制类型转换时,高位数截取成低位数的方法
/** * 强制类型转换中的补码.反码.原码一搞清楚 */ int b=233;//正整数强转 System.out.println((byte)b); //负数:原码的绝对值取反再加一 符号为不变 ...
- mooc- 基本程序设计方法week1,week2
学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...
- C++中static_cast和dynamic_cast强制类型转换
在C++标准中,提供了关于类型层次转换中的两个关键字static_cast和dynamic_cast. 一.static_cast关键字(编译时类型检查) 用法:static_cast < ty ...
- 谈 JavaScript 中的强制类型转换 (2. 应用篇)
这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...
随机推荐
- 2017-2018-2 20165206 实验三 《敏捷开发与XP实践》实验报告
2017-2018-2 20165206 实验三 <敏捷开发与XP实践>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:韩啸 学号:20165206 指导教师: ...
- OpenCV-Python入门教程1-图片
首先感觉学习OpenCV-python最好的学习工具官方的英文文档. 官方英文教程:OpenCV-Python Tutorials 我使用的是anaconda里的 jupyter notebook.至 ...
- docker挂载点泄露问题
本来以为我不会遇到. 结果还是遇到了. 现象为k8s delete pod时,系统一直显示Terminatiing,无论多久都不能正常. 以下两个帖子大概说明了是怎么回事. https://blog. ...
- [转] history.back()和history.go()的区别
Javascript:history.go()和history.back()的用法和区别 go(-1): 返回上一页,原页面表单中的内容会丢失:history.go(-1):后退+刷新:history ...
- java传值和传引用区别
1. 在java中所有的参数都是传值的,引用符号&的传递是C++中才有的:2. 在java传参中,基本类型(byte--short--int--long--float--double--boo ...
- CAS和ABA问题
一.引言 ...
- HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...
- CodeForces 516A Drazil and Factorial 动态规划
原文链接http://www.cnblogs.com/zhouzhendong/p/8990592.html 题目传送门 - CodeForces 516A 题意 对于一个正整数$x$,$f(x)=x ...
- 063 SparkStream数据接收方式
1.两种方式 2.Basic Source 由StreamingContext可以提供的API 上面做的wordcount中的方式就算是第一种方式. 3.Advanced Source 使用数据接收器 ...
- Redis闪退解决办法
复杂办法! cmd 进入命令,cd进入redis文件 输入:redis-server.exe redis.windows.conf,手动开启! 简单办法,删除重新下载! 不确定办法如下 1.在解压的r ...