0、总结

  (1)要转换的变量,转换前、转换后、转换后的结果。

  (2)一般情况下,避免进行类型转换。

1、_static_cast(静态类型转换,int 转换为char)

  格式:TYPE B = static_cast<TYPE>(a)

  reinterpreter_cast(重新解释类型):专门用于指针类型的转换。

void main()
{
double dpi = 3.1415;
//int num1 = dpi;//默认自动类型转换,会提示 warning
int num2 = static_cast<int>(dpi);//静态类型转换,在编译时会做类型检查,如有错误会提示 // char* -> int*
char* p1 = "hello";
int* p2 = nullptr;
//p2 = static_cast<int*>(dpi);// 转换类型无效,
p2 = reinterpret_cast<int *>(p1);//相当于强制类型转化,指针类型
cout << p1 << endl;//输出字符串
cout << p2 << endl;//输出指针的首地址 system("pause");
}

2、dynamic_cast(动态类型转化,如子类和父类之间的多态类型转换)

#include <iostream>
using namespace std; class Animal
{
public:
virtual void cry() = ;
};
class Dog :public Animal
{
public:
virtual void cry()
{
cout << "wangwang" << endl;
}
void doHome()
{
cout << "kanjia" << endl;
}
};
class Cat :public Animal
{
public:
virtual void cry()
{
cout << "miaomiao" << endl;
}
void doHome()
{
cout << "keai" << endl;
}
};
void playObj(Animal *base)
{
base->cry();
//运行时的类型识别,
//父类对象转换为子类对象
Dog *pDog = dynamic_cast<Dog*>(base);//如果不是该类型,则返回值为null
if (pDog != NULL)
{
pDog->doHome();
}
Cat *pCat = dynamic_cast<Cat*>(base);//如果不是该类型,则返回值为null
if (pCat != NULL)
{
pCat->doHome();
}
} void main()
{
Dog d1;
Cat c1;
//父类对象转换为子类对象
playObj(&d1);
playObj(&c1);
//子类对象转换为父类对象
Animal *pBase = nullptr;
pBase = &d1;
pBase = static_cast<Animal *>(&d1); system("pause");
}

3、const_cast(去 const 属性)

  该函数把只读属性去除。

p1 = const_cast<char*>(p);

C++(四十五) — 类型转换(static_cast、dynamic_cast 、const_cast、reinterpreter_cast)的更多相关文章

  1. 四种强制类型转换的总结(const_cast、static_cast、dynamic_cast、reinterpreter_cast)

    四种强制类型转换的总结(const_cast.static_cast.dynamic_cast.reinterpreter_cast) 转载 2011年10月03日 23:59:05 标签: stru ...

  2. NeHe OpenGL教程 第四十五课:顶点缓存

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  4. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  5. “全栈2019”Java第四十五章:super关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备

     孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...

  7. (十四--十五)数据库查询优化Part I

    (十四--十五)数据库查询优化Part I 如果理解的有问题.欢迎大家指出.这也是我在看课记得笔记..可能会有很多问题 查询优化的重要性 请记住用户只会告诉DMBS他们想要什么样的结果,而不会告诉他们 ...

  8. 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...

  9. 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法

    第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...

  10. C++雾中风景11:厘清C++类型转换(static_cast,dynamic_cast,reinterpret_cast,const_cast)

    C++是一门弱类型的语言,提供了许多复杂和灵巧类型转换的方式.笔者之前写的Python与Go都是强类型的语言,对这种弱类型的设计实在是接受无力啊~~ ( 生活所迫,工作还得写C++啊~~)C++语言提 ...

随机推荐

  1. OpenShift 4.2 etcd operatorhub离线环境部署

    本文记录在OperatorHub中存在界面但缺少镜像的环境下如何安装部署.感谢王征提供的大力支持和指导. 现在一个在线环境找到etcd所需要的镜像 quay.io/coreos/etcd-operat ...

  2. 做JAVA的需要了解的框架

    spring netty Elasticsearch Eureka Hystrix 接口的依赖性管理 Zuul Config Bus ActiveMQ redis zookper quartz had ...

  3. JEECG实现模糊查询

    1.JEECG默认不带模糊查询的,但实际开发中会经常用到模糊查询,因此要适当修改(在相应的查询处). @RequestMapping(params = "datagrid") pu ...

  4. Gerrit - Gerrit与GitLab集成

    1 - 简介 虽然Gerrit 本身提供 Code Review和 Git 仓库的两大功能,但实际上很多项目用的是其他的Git仓库,例如GitLab和GitHub. 一般情况下,Gerrit位于最终代 ...

  5. centos7 spark2.3.1集群搭建

    1.安装jdk 2.安装scala 参照jdk的安装 3.ssh 免密码登录 4.安装hadoop 以上四步请参照   centos7 安装hadoop2.7.6(分布式) 5.安装spark  1) ...

  6. maven本地仓库配置文件

    背景:在使用maven的过程中,感觉本地的jar包位置飘忽不定,归根结底是因为对maven的配置文件理解不清楚造成的. 在maven的安装包下面D:\apache-maven-3.6.1\conf有s ...

  7. C++静态库与动态库的区别

    在日常开发中,其实大部分时间我们都会和第三方库或系统库打交道.在 Android 开发音视频开发领域,一般会用到 FFmepg.OpenCV.OpenGL 等等开源库, 我们一般都会编译成动态库共我们 ...

  8. 用NDK生成cURL和OpenSSL库

    最近在用Qt开发Android应用时需要获取https页面内容,但Qt内置的QNetworkAccessManager类只支持下面这些协议(调用其supportedSchemes成员函数获取): (& ...

  9. Deploy custom service on non hadoop node with Apache Ambari

    1   I want to deploy a custom service onto non hadoop nodes using Apache Ambari. I have created a cu ...

  10. Java自学-数组 Arrays

    java.util.Arrays类常用方法 Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能. 大大提高了开发人员的工作效率. 步骤 1 : 数组复制 与使用System.arra ...