C++ 类型转换操作符(Type Conversion Operators)
来源:互联网 发布:休闲运动套装淘宝店 编辑:程序博客网 时间:2024/05/22 15:46
- static_cast
- dynamic_cast
- const_cast
- reinterpret_cast
1. static_cast
执行非多态的转换,用于代替C中通常的转换操作
2.dynamic_cast
功能:将多态型别(polymorphic type)向下转型(downcast)为其实际静态类型(real static type)。 特点:这是唯一在运行期进行检验的转型动作 用法:你可以用它来检验某个多态对象的类型(polymorphic value)。 示例:
#include <iostream>using namespace std;class Car{public: virtual void fun() { }};class Class_1:public Car{public: virtual void fun() { cout << "Class_1" << endl; }};class Class_2:public Car{public: virtual void fun() { cout << "Class_2" << endl; }};void isClass_1(Car* cp){ Class_1* p = dynamic_cast<Class_1*> (cp); if(p != NULL){ cout << "is Class_1" << endl; }else{ cout << "not Class_1" << endl; }}int main(){ Class_1 class_1; Class_2 class_2; isClass_1(&class_1); isClass_1(&class_2); return 0;}
运行结果: is Class_1 not Class_1
3.const_cast
功能:用来移除变量的const或volatile限定符 问:我们设置const不想修改const变量的值,那我们又为什么要去const呢? 答:我们可能调用了一个参数不是const的函数,而我们要传进去的实际参数确实const的,但是我们知道这个函数是不会对参数做修改的。于是我们就需要去除const限定,以便函数能够接受这个实际参数。 示例:
#include <iostream> using namespace std; void print (int *value) { cout << *value<< endl; } int main(void) { const int num = 12; print(const_cast<int *>(&num)); // print(&consatant); return 0; }
4.reinterpret_cast
注意:这些操作符取代了以往小圆括号所代表的旧式转型,能够清楚阐明转型的目的。小圆括号转型可替换dynamic_cast之外的其他三种转型,也因此你运用它时,你无法明确显示用它的确切理由。这些新式转型操作符给了编译器更多的信息,让编译器清楚知道转型的理由,并在转型失败时释出一份错误报告。
0 0
- C++ 类型转换操作符(Type Conversion Operators)
- C++类型转换操作符(type conversion operator)
- 类型转换操作符Cast Operators
- C++--类型转换(Type Casting)
- Conversion Operators
- Conversion Operators
- C++重载类型转换操作符(type cast operator
- C++ 类型转换操作与操作符重载 operator type() 与 type operator()
- C++—类型转换(Type Casting)
- 类型转换和操作符重载 (c#)
- C\C++类型转换操作符
- 操作符(Operators)
- 操作符(Operators)
- 操作符Operators
- C++: Type Conversion (数字,指针,其他type)
- Struts2学习笔记(十一) 类型转换(Type Conversion)(上)
- Struts2学习笔记(十二) 类型转换(Type Conversion)(下)
- C++ 类型转换(Casting Operators)
- spinner 的使用
- 添加物理引擎 小小的优化 4-15
- 关于对DB2的“实例”的理解
- AndroidStudio编译时卡在Gradle Build Running并死机的解决方法
- 制作一款简单的网络图片查看器
- C++ 类型转换操作符(Type Conversion Operators)
- div
- Adaboost
- 分治-棋盘覆盖问题
- Begining
- 学习
- manpath问题解决
- SpringMVC之@RequestMapping
- 正则表达式的() [] {}有不同的意思。