c++ 指针类型转换
2024-08-31 06:23:16
1、数据类型转换(static_cast)
//数据类型转换
printf("%d\n", static_cast<int>(10.2));
2、指针类型转换(reinterpret_cast)
//指针类型转换
int *pint = new int(1);
char *pch = reinterpret_cast<char *>(pint);
3、涉及到const的指针类型转换(const_cast)
const int num[5] = { 1,2,3,4,5 };
const int *p = num;
int *pint = const_cast<int *>(p);
4、子类转化为父类(dynamic_cast)
class man
{
public:
int name;
//加上virtual关键字,可以使得父类用子类初始化后可以调用子类的函数
virtual void run()
{
cout << "man is running" << endl;
}
}; class son :public man
{
public:
void run()
{
cout << "son is running" << endl;
}
}; void main()
{
/*man man1;
son son1;
man *p = &man1;
p->run();
p = &son1;
p->run();*/
man *pman = new man;
son *pson = new son;
//子类指针转换为父类指针,但是还是调用子类的函数
man *pfu = dynamic_cast<man *>(pson);
pfu->run();
system("pause");
}
volatile关键字
表示该变量易变,每次在访问该关键字修饰的变量时都要读内存,不对其进行优化。
mutable关键字
类的常成员函数在语义上是不允许修改类的成员变量的,但是有时候可能根据代码的需要并不是这么绝对。那么就可以使用mutable声明一个类的成员变量,它告诉编译器类的常成员函数可以修改这个变量。
explicit关键字
修饰构造函数,通常用作 构造函数静止隐式转换。
四种类型转换
. const_cast
去掉类型的const或volatile属性。
const int a=;
int &b=const_case<int&>(a); . static_cast
静态类型转换,用于类型间强制转换。用于:
()基类和子类转换,子类指针转父类是安全的,父类转子类不安全。
()基本数据类型转换。
()空指针转换成目标类型指针。
()转换为void类型
int n=;
double d=static_cast<double>(n);
int *pn=&n;
double *d=static_cast<double*>(&n);
void *p = static_case<void*>(pn);
.dynamic_cast
动态类型转换,运行时类型安全检查(转换失败返回NULL)
()安全基类和子类转换,基类转子类会失败。
()必须有虚函数。
()相同基类不同子类间转换,结果为NULL。 .reinterpret_cast
重新解释类型,没有进行二进制转换。
一般用在函数指针类型之间转换。
最新文章
- 第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList();
- MySQL数据库的优化(上)单机MySQL数据库的优化
- JS添加MD5,JS提示框
- React快速入门
- MySQL配置文件my.cnf参数优化和中文详解
- page cache和buffer cache 图解
- os mac apache+php+mysql环境配置
- zookeeper_01:zookeeper概述
- 在阿里云ECS(CentOS6.5)上安装mysql
- MVC两种获取上传的文件数据变量的方式
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(二)用户接口层之RtspClient类及其构造函数
- UNIX环境高级编程——守护进程列表
- 非阻塞模式(ioctlsocket)
- 1-蓝桥杯套路-java
- Java中的instanceof和isInstance基础讲解
- mysql(5.5)安装后忘记密码
- 解决MySQL Workbench导出乱码问题
- hdu 1828 Picture(线段树扫描线矩形周长并)
- C++中 线程函数为静态函数 及 类成员函数作为回调函数
- linux 查看进程启动路径