【C++】四种类型的转换

news/2024/7/8 6:39:05

C++四种类型的转换

包括这四种:const_cast , static_cast , dynamic_cast , reinterpret_cast

先来说下C语言中的类型转换,非常的暴力,就是耍流氓:

float a = 12.23;
int b = (int)a;

下面我写的都是最基础的,简单的,下面这篇文章写的很详细,我还刚学这东西,就只是写一下我自己的理解:

c++ 四种强制类型转换介绍_ydar95的博客-CSDN博客_c++指针类型强转c++ 四种强制类型转换介绍const_cast , static_cast , dynamic_cast , reinterpret_cast1.https://blog.csdn.net/ydar95/article/details/69822540

static_cast

int main()
{float a = 12.23;int b = static_cast<int>(a);  //尖括号中的就是想转的类型//等同于int b = (int)a;cout << b << endl;
}

基本数据类型的转换,就靠static_cast来进行转换!!!

const_cast

int main()
{const int a = 10;int* p = const_cast<int*>(&a);   //const_cast在这块的作用就是去常性//这行代码等于int* p = (int*)&a;  这玩意是C语言中的强转
}

 const_cast去常性!!!

reinterpret_cast

int main()
{int a = 10;char* pq = reinterpret_cast<char*>(&a);//和C语言中强转char* p = (cahr*)(&a);
}

整型a,为什么可以将int的地址赋值给char* p呢,拿reinterpret_cast对a的地址进行重新解释,赋值给char* p,相当于C语言中的char* p = (cahr*)(&a);

dynamic_cast

class Object
{
public:virtual void fun() {}
};class Base:public Object
{
public:virtual void fun() {}
};int main()
{Object* op = NULL;Base* bp = NULL;Object obj;  //基类对象Base base;  //派生类对象op = dynamic_cast<Object*> (&base); //从派生类指针转换到基类指针//相当于:op = &base;//需要注意的是,我们不能将基类指针转换到父类指针
} 

dynamic_cast将派生类base转换成Object*赋值给基类指针(派生类指针转换到基类指针),但是不可以将基类指针转换到父类指针,会报错(无法将Object* 类型转换到Base*)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/15576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【C++】满二叉树、完全二叉树等概念解释

二叉树中的判断有以下几种&#xff1a; 是否完全二叉树、是否满二叉树、是否为BST树、是否为平衡二叉树、是否为对称二叉树、完美二叉树 满二叉树&#xff1a; 除最后一层无任何子节点外&#xff0c;每一层上的所有结点都有两个子结点的二叉树。 上述所示图除最外一层节点之外…

【C++】多线程(链式、循环队列)实现生产者消费者模式

生产者消费者模式&#xff1a; 生产者消费者问题&#xff08;英语&#xff1a;Producer-consumer problem&#xff09;&#xff0c;也称有限缓冲问题&#xff08;英语&#xff1a;Bounded-buffer problem&#xff09;&#xff0c;是一个多线程同步问题的经典案例。该问题描述了…

添加引用方式抛出和捕获干净的WebService异常

转载&#xff1a;http://www.cnblogs.com/ahdung/p/3953431.html 说明&#xff1a;【干净】指的是客户端在捕获WebService&#xff08;下称WS&#xff09;抛出的异常时&#xff0c;得到的ex.Message就是WS方法中抛出的异常消息&#xff0c;不含任何“杂质”。 前提&#xff1a;…

基数排序(桶排序)

基数排序又叫桶排序&#xff1a; 先按照个位数排序&#xff0c;第一次排序好之后&#xff1b;再次按照十位数进行排序&#xff0c;第二次排序好之后&#xff1b;第三次对百位进行排序.................. 实现原理图&#xff1a;拿出一些个类似“桶”的东西 将分别按照个位&am…

如何用两个栈实现一个队列?

先看分析 来看代码&#xff0c;因为代码量巨大&#xff0c;其中包括两个头文件&#xff0c;两个实现函数 &#xff0c; 这块就写一个两个栈实现按一个队列的头文件以及函数名&#xff0c;填补代码不难的&#xff0c;有需要的话&#xff0c;我在评论区发出来&#xff1a; 这部分…

堆排序(超详细的原理图以及代码注释)

在了解学习堆排序之前&#xff0c;我们必须清楚以下的概念&#xff1a; 上述概念搞清楚之后&#xff0c;来看下面的原理图&#xff1a; 然后原理部分就讲完了 下面来看如何由子节点下标推出父节点和父节点下标推出子节点下标 下面这个原理图来展现一下为什么在调整大顶堆的时候…

【C++】模拟实现多线程中的信号量

信号量&#xff1a; 二元信号量和一般信号量 二元信号量是最简单的一种锁&#xff0c;适合那种被唯一线程访问的资源&#xff0c;而一般信号量就允许多线程并发的访问资源。 二元信号量类似于互斥量&#xff0c;但是有一点不同的是&#xff0c;互斥量只能被上锁的那个线程释…

senfile函数实例的运行过程截图

//要传输的文件内容如下所示&#xff1a; 启动服务器&#xff0c;等待客户端连接&#xff08;在同一台主机上模拟的&#xff09; 客户端远程登录&#xff0c;这里是在本地登录 这个要注意一点就是远程登陆的时候一定要带上端口号不然连接失败&#xff01;&#xff01;转载于:ht…