C++(四十五) — 类型转换(static_castdynamic_cast const_castreinterpreter_cast)
Posted eilearn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++(四十五) — 类型转换(static_castdynamic_cast const_castreinterpreter_cast)相关的知识,希望对你有一定的参考价值。
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() = 0; ; 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_castdynamic_cast const_castreinterpreter_cast)的主要内容,如果未能解决你的问题,请参考以下文章
完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五