行业知识
【C++高阶(九)】C++类型转换以及IO流
2026-10-29 07:54:43
来源:互联网转载
博主CSDN主页:杭电码农-NEO
⏩专栏分类:C++从入门到精通⏪
代码仓库:NEO的学习日记
关注我带你学习C++
C++高阶
- 1. 前言
- 2. C语言类型转换的方式
- 3. C++的强制类型转换
- 4. RTTI介绍(了解)
- 5. C语言的输入输出和缓冲区
- 6. C++IO流
- 7. C++文件IO流
- 8. 总结以及拓展
1. 前言
C语言中常见的类型转换有隐式类型
转换和强制转换,但是在面向对象的
语言中,这样使用未免太不优雅了!
本章重点:
本篇文章前半截着重讲解C++强制
转换的四种类型,以及为什么C++
需要自己设计一套类型转换.其中
会复习C语言的类型转换的方式.
后半截会讲解C++的IO流和文件IO
还会介绍string stream相关知识
2. C语言类型转换的方式
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。
- 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败
int i = 1;// 隐式类型转换double d = i;printf("%d, %.2f\n" , i, d);- 显式类型转化:需要用户自己处理
int* p = &i;// 显示的强制类型转换int address = (int) p;printf("%x, %d\n" , p, address);C语言类型转换的缺陷:
- 隐式类型转化有些情况下可能会出问题:比如数据精度丢失
- 显式类型转换将所有情况混合在一起,代码不够清晰
因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。
3. C++的强制类型转换
标准C++为了加强类型转换的可视性
引入了四种命名的强制类型转换操作符:
static_castreinterpret_castconst_castdynamic_cast
下面将一一介绍它们的用法:
- static_cast
static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换
double d = 12.34;int a = static_cast(d);//将d强制转换为int类型coutpublic :virtual void f(){}};class B : public A{};void fun (A* pa){// dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回B* pb1 = static_castA a;B b;fun(&a);fun(&b);return 0;}char _address[32];int _port;Date _date;};struct ConfigManager{public:ConfigManager(const char* filename):_filename(filename){}void WriteBin(const ServerInfo& info){ofstream ofs(_filename, ios_base::out | ios_base::binary);ofs.write((const char*)&info, sizeof(info));}void ReadBin(ServerInfo& info){ifstream ifs(_filename, ios_base::in | ios_base::binary);ifs.read((char*)&info, sizeof(info));} // C++文件流的优势就是可以对内置类型和自定义类型,都使用 // 一样的方式,去流插入和流提取数据 // 当然这里自定义类型Date需要重载 和 ofstream ofs(_filename);ofs ifstream ifs(_filename);ifs info._address info._portinfo._date;}private:string _filename; // 配置文件};int main(){ServerInfo winfo = { "192.0.0.1", 80, { 2022, 4, 10 } };// 二进制读写ConfigManager cf_bin("test.bin");cf_bin.WriteBin(winfo);ServerInfo rbinfo;cf_bin.ReadBin(rbinfo);cout
上一篇:萤石服务器故障怎么解决?
下一篇:传奇民间服务器怎么开挂?