C++标准库笔记:13.12.2 实作一个Input操作符
来源:互联网 发布:软件功能测试流程 编辑:程序博客网 时间:2024/06/14 19:01
实作一个Input操作符,即重载操作符operator <<。原则同实作Output操作符相同,参看C++标准库笔记:13.12.1 实作一个Output操作符
下文代码所用测试类:
class Fraction{public: Fraction( int nNumerator = 0, int nDemominator = 1 ) :m_nNumerator( nNumerator ), m_nDemominator( nDemominator ) {} int Numerator() const { return m_nNumerator; } int Demominator() const { return m_nDemominator; }private: int m_nNumerator; //分子 int m_nDemominator; //分母};
简单实现,不检测出错状态,直接读出分数:
std::istream& operator >> ( std::istream& in, Fraction& f ){ int n = 0, d = 1; in >> n; in.ignore(); //skip '/' in >> d; f = Fraction( n, d ); return in;}
以上简单实现存在几个问题:
- 参数传送的是istream(
std::basic_istream<char>
),故对wchar_t就无能为力了。 - 未进行错误处理,读取错误应设置流的错误标志。
- 读取失败时,不应改变结果值(
Fraction& f
)。
以下代码解决了以上提到的问题(仅仅是演示而已,还有很多细节没考虑进去):
template <class charT, class traits>inline std::basic_istream<charT, traits>&operator >> ( std::basic_istream<charT, traits>& in, Fraction& f ){ int n = 0, d = 1; in >> n; if ( in.peek() == '/' ) { in.ignore(); in >> d; } //if denominator is zero //set failbit as IO format error if ( d == 0 ) { in.setstate( std::ios::failbit ); return in; } //if everything is fine as far //change the value of the fraction if ( in ) { f = Fraction( n, d ); } return in;}
阅读全文
0 0
- C++标准库笔记:13.12.2 实作一个Input操作符
- C++标准库笔记:13.12.1 实作一个Output操作符
- 《C标准库》学习笔记
- C++标准库笔记:13.12.4 以非格式化函数完成自定义IO操作符
- 實作XNA FRAMEWORK中的INPUT操作 (一)
- C语言标准库之文件操作
- C标准库之文件IO操作
- C标准库字符串类操作
- C标准库文件和文件夹操作
- 标准C文件操作
- c++primer学习笔记2 - 标准库类型
- C标准库 memset 的一个问题
- C标准库的setlocale()用法笔记
- C标准库的setlocale()用法笔记
- C标准库的setlocale()用法笔记
- C标准库的setlocale()用法笔记
- C标准库的setlocale()用法笔记
- C标准库的setlocale()用法笔记
- 笑谈Android图表-MPAndroidChart
- Soapui接口功能测试数据传递
- Android launcher -- 调试运行launcher源码 2
- Git常用命令
- Git之使用GitHub搭建远程仓库
- C++标准库笔记:13.12.2 实作一个Input操作符
- C语言程序设计(42)
- 优化Linux下的内核TCP参数以提高系统性能
- <Android开源库> MPAndroidChart Wiki(译文)~Part 1
- mysql 中 find_in_set()
- android 传统蓝牙开发 (附示例源码)
- linux驱动调试之段错误分析-根据栈信息分析函数调用过程
- STL中容器相等(equality)和等价(equivalence)的区别
- 【Dubbo分布式服务框架】1.Dubbo基础介绍