小工具知识网

当前位置: 首页 > 行业知识 > 【C++高阶(九)】C++类型转换以及IO流

行业知识

【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语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。

    1. 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败
    int i = 1;// 隐式类型转换double d = i;printf("%d, %.2f\n" , i, d);
    1. 显式类型转化:需要用户自己处理
    int* p = &i;// 显示的强制类型转换int address = (int) p;printf("%x, %d\n" , p, address);

    C语言类型转换的缺陷:

    1. 隐式类型转化有些情况下可能会出问题:比如数据精度丢失
    2. 显式类型转换将所有情况混合在一起,代码不够清晰

    因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。


    3. C++的强制类型转换

    标准C++为了加强类型转换的可视性

    引入了四种命名的强制类型转换操作符:

    static_castreinterpret_castconst_castdynamic_cast

    下面将一一介绍它们的用法:

    1. 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 

上一篇:萤石服务器故障怎么解决?

下一篇:传奇民间服务器怎么开挂?