【c++修行之路】IO流架构及使用

这篇具有很好参考价值的文章主要介绍了【c++修行之路】IO流架构及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

大家好久不见,今天一起来学习c++中的IO流。

输入输出库

【c++修行之路】IO流架构及使用,C++修行之路,c++,java,开发语言
【c++修行之路】IO流架构及使用,C++修行之路,c++,java,开发语言

这两张架构图略显复杂,这里给出一张比较清楚的IO流架构图:
【c++修行之路】IO流架构及使用,C++修行之路,c++,java,开发语言

也就是说,我们平时使用的诸如cin、cout、cerr、clog都是来自 <iostream> 这个头文件下的,他们分别是
<istream> 头文件下的istream和ostream的实例对象。

<istream> 头文件里的iostream继承了istream和ostream两个类,因此在 <fstream><sstream> 类里的fstream和sstream都兼具对应的io功能。

文件读写

这里顺便说明一下:友元的实现是编译器通过特殊机制授权让这个函数能拿到类的成员的,而不是通过this指针拿到的,而istream其实就是basic_istream<char, char_traits<char>>的一个别名.

class Date
{	
	//友元关系不会被继承
	friend istream& operator >>(istream& in, Date& date);
	friend ostream& operator <<(ostream& out, const Date& date);
public:


	Date(int year = 1, int month = 1, int day = 1)
		:_year(year)
		, _month(month)
		, _day(day)
	{}

	operator bool()
	{
		if (_year == 0)
			return false;

		return true;
	}

private:
	int _year;
	int _month;
	int _day;
};

//输入重定向
//
//decltype(cin)& operator >>(decltype(cin)& no,const Date& date)
//basic_istream<char, struct std::char_traits<char>>& operator >>(decltype(cin)& no, const Date& date)
//basic_istream<char>& operator >>(decltype(cin)& no, const Date& date)
istream& operator >>(istream& in, Date& date)
{
	//cout << ">> ok" << endl;
	//cout << typeid(cin).name() << endl;

	in >> date._year >> date._month >> date._day;
	return in;
}

//输出重定向
ostream& operator <<(ostream& out, const Date& date)
{
	out << date._year << " " << date._month << " " << date._day;
	return out;
}


#include <fstream>
struct ServerInfo
{

	//string _address;
	char _address[32];
	int _port;
	Date _date;
};

class ConfigManager
{
public:
	ConfigManager(string filename) : _filename(filename)
	{

	}

	//二进制读写
	void ReadBin(ServerInfo& info)
	{
		ifstream ifs(_filename, istream::in | istream::binary);
		ifs.read((char*)&info, sizeof(info));
	}

	void WriteBin(const ServerInfo& info)
	{
		ofstream ofs(_filename, ofstream::out | ofstream::binary);
		ofs.write((char*)&info, sizeof(info));
		//必然不能写入string,string的内容是new出来的,这里只把指针存好了
	}


	//文本读写
	void ReadText(ServerInfo& info)
	{
		ifstream ifs(_filename);
		ifs >> info._address;
		ifs >> info._port;
		ifs >> info._date;
	}

	void WriteText(const ServerInfo& info)
	{
		ofstream ofs(_filename);
		ofs << info._address << endl;
		ofs << info._port << endl;
		ofs << info._date << endl;
	}

private:
	string _filename;
};

序列化与反序列化

// 序列化和反序列化
#include <sstream>

struct ChatInfo
{
	string _name; // 名字
	int _id;      // id
	Date _date;   // 时间
	string _msg;  // 聊天信息
};

ostream& operator<<(ostream& out, ChatInfo& info)
{
	cout << info._name << info._id << info._date << info._msg << endl;
	return out;
}


int main()
{
	ChatInfo winfo = { "丁真", 135246, { 2022, 7, 14 }, "你好我是雪豹" };
	stringstream oss;
	oss << winfo._name << " ";
	oss << winfo._id << " ";
	oss << winfo._date << " ";
	oss << winfo._msg;

	string str = oss.str();

	stringstream iss(str);
	ChatInfo rinfo;
	iss >> rinfo._name;
	iss >> rinfo._id;
	iss >> rinfo._date;
	iss >> rinfo._msg;

	cout << rinfo << endl;

	return 0;
}

结语

到这里,就是IO流的全部内容了,感谢观看,我们下次再见~文章来源地址https://www.toymoban.com/news/detail-579100.html

到了这里,关于【c++修行之路】IO流架构及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++修行之道】STL(初识pair、vector)

    目录 一、pair 1.1pair的定义和结构 1.2pair的嵌套 1.3pair自带排序规则 1.4代码示例  二、vector 2.1vector的定义和特性 2.2vector的初始化 一维初始化: 2.3vector的常用函数 2.4vector排序去重 排序: 去重: 示例: 在C++中,pair是一个模板类,用于一对值的组合。它位于utility头文件中。pai

    2024年01月23日
    浏览(40)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(76)
  • C语言修行之函数篇(二)strcasecmp,strncasecmp —— 比较字符串字符

    strcasecmp()函数对字符串s1和s2执行逐字节比较,忽略字符的大小写。如果发现s1分别小于、匹配或大于s2,则返回一个小于、等于或大于0的整数。 函数输入值: s1 / s2 :对比字符串 n:对比个数 函数返回值: strcasecmp()函数在忽略大小写后 如果发现si分别小于、匹配或大于s2,则

    2024年02月07日
    浏览(49)
  • 【VisualStudio】基于 Visual Studio 使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月15日
    浏览(66)
  • 【Visual Studio】使用 C++ 语言,配合 Qt,开发了一个串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 我要使用的功能比较简单,主要包含扫描串口、打开串口、发送数据、接收数据、暂停按钮、停止按钮,因此接下里将围绕这几个功能依次更新。 我的工程项目名字叫 “GUI”。

    2024年02月11日
    浏览(68)
  • 微服务架构之路1,服务如何拆分?使用微服务的注意事项?

    大家好,我是哪吒。 微服务已经是Java开发的必备技能,甲方不管项目大小,都想上微服务,感觉上了就高大上了,牛逼了。 微服务确实给我们带来了一定的便利性,但是也带来了麻烦,比如学习成本高,存在很多不可预见的问题。 我是做互联网项目的,刚开始的时候,用的

    2024年02月05日
    浏览(54)
  • 【Visual Studio】报错 C2653,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在添加 Widget 做

    2024年02月11日
    浏览(51)
  • 从C语言到C++_38(C++的IO流+空间适配器)STL六大组件联系

    目录 1. C语言的输入和输出和流 2. C++的IO流 2.1 C++标准IO流 2.2 C++文件IO流 2.3 stringstream(字符流) 3. 空间配置器(了解) 3.1 一级空间适配器 3.2 二级空间配置器 3.3 二级空间适配器的空间申请 3.4 二级空间配置器的空间回收 3.5 对象构造与释放和与容器结合 4. STL六大组件联系

    2024年02月09日
    浏览(40)
  • 【测试开发之路】Java & Selenium自动化

    1、Selenium介绍 ​ 使用前需要下载浏览器对应的Driver,Selenium提供了EdgeDriver和ChromiumDriver两种驱动类。需要安装与本机浏览器版本相同的驱动。 ​ EdgeDriver下载地址:Microsoft Edge WebDriver - Microsoft Edge Developer ​ ChromiumDriver下载地址:CNPM Binaries Mirror (npmmirror.com) 2、导入Maven库 (

    2024年02月12日
    浏览(46)
  • java之路 —— Shiro与Springboot整合开发

    在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro。 在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro。 在整合之前,让我们先来了解一下Shiro开发

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包