day_11_异常、I/O流
来源:互联网 发布:农村淘宝服务站查询 编辑:程序博客网 时间:2024/06/10 17:17
- 二十四异常Exception
- 1程序开发中的常见错误
- 2C中的错误处理机制
- 3C异常处理机制
- 4异常语法
- 5函数异常说明
- 6标准异常类
- 7构造函数中的异常
- 8析构函数最好不要抛出异常了解
- 二十五IO流了解
- 1主要IO流类
- 2格式化IO
- 3字符串流
- 4文件流
- 5二进制IO
- 附录
- 1IO流的状态成员函数
- 2IO流格式化函数
- 3IO流格式标志
- 二十四异常Exception
二十四、异常(Exception)
1、程序开发中的常见错误
1)语法错误
2)逻辑错误
3)功能错误
4)设计缺陷
5)需求不符
6)环境异常
7)操作不当
2、C中的错误处理机制
1)通过返回值表示错误
优点:
函数调用路径中所有的局部对象都可以正常的被析构,不会出现内存泄漏;
缺点:
错误处理流程比较复杂,逐层判断,代码臃肿;
2)通过远程跳转处理错误
优点:
不需要逐层判断,一步到位的错误处理,代码精炼;
缺点:
函数调用路径的局部对象失去被析构的机会,造成内存泄漏;
3、C++异常处理机制
结合C中两种错误处理的优点,同时避免它们的缺点,在实现一步到位的错误处理的同时,保证所有的栈对象可以正常被析构;
4、异常语法
1)异常抛出
throw 基本类型变量;
throw 类类型的对象;
2)异常捕获
try{ 可能引发异常语句; a; b;//抛出异常 c;}catch(异常类型1){ 针对异常类型1的处理;}catch(异常类型2){ 针对异常类型2的处理;}...catch(...){ 针对其它异常的处理;}
注意:
catch子句根据异常对象的类型自上而下顺序匹配,而不是最优匹配,因此对子类类型的异常捕获不能放在对基类类型的异常捕获后面,否则前者将被后者提前截获。
5、函数异常说明
1)可以在函数原型中增加异常说明,说明该函数可能抛出的异常;
返回类型 函数名(形参表)throw(异常类型表){...}
2)函数的异常说明是一种承诺,表示该函数不会抛出说明以外的异常类型。但是如果抛出了说明以外的异常,则无法捕获,而是被系统捕获,终止进程。
3)函数异常说明的两种极端形式:
a. 不写异常说明,表示可以抛出任何异常;
b. 空异常说明,throw()
,表示不会抛出任何异常;
4)如果函数的声明和定义分开写,要保证其异常说明严格一致,但异常说明的顺序无所谓;
5)如果基类中的虚函数带有异常说明,那么该函数在子类的覆盖版本不能说明比基类版本抛出更多的异常,否则将因为放松throw的限定导致编译失败;
6、标准异常类
class exception{ public: exception() throw(){} virtual ~exception() throw(){} virtual const char* what()const throw();};
7、构造函数中的异常
1)构造函数可以抛出异常,但是这样的对象将会被不完整构造,其析构函数永远不会被执行;
2)在构造函数抛出异常之前,需要手动地销毁所分配的动态资源。
8、析构函数最好不要抛出异常(了解)
二十五、I/O流(了解)
1、主要I/O流类
2、格式化I/O
1)格式化函数(成员函数)
cout << 10/3.0 << endl; // 3.33333cout.precision(8); // 设置浮点数的精度:8位有效数字cout << 10/3.0 << endl; // 3.3333333
2)流控制符(全局函数)
cout << setprecision(10) << 10/3.0 << endl; // 3.333333333
3、字符串流
#include <sstream>istringstream // 读取内存,类似sscanfostringstream // 写入内存,类似sprintf(多变一)stringstream // 读写内存
4、文件流
#include <fstream>ifstream // 读文件,类似fscanfofstream // 写文件,类似fprintffstream // 读写文件
5、二进制I/O
// 类似fwrite()ostream& ostream::write(const char* buffer, size_t num);// 类似fread()istream& istream::read(char* buffer, streamsize num);
附录:
1、I/O流的状态成员函数
2、I/O流格式化函数
格式化函数 功能int ios::precision(int);
设置浮点精度,返回原精度; int ios::precision(void)const;
获取浮点精度; int ios::width(int);
设置显示域宽,返回原域宽; int ios::width(void)const;
获取显示域宽; char ios::fill(char);
设置填充字符,返回原字符; char ios::fill(void)const;
获取填充字符; long ios::flags(long);
设置格式标志,返回原标志; long ios::flags(void)const;
获取格式标志; long ios::setf(long);
添加格式标志位,返回原标志; long ios::setf(long, long);
添加格式标志位,返回原标志,先用第二个参数将互斥域清零; long ios::unsetf(long);
清除格式标志位,返回原标志;3、I/O流格式标志
格式标志位 互斥域 说明ios::left
ios::adjustfield
左对齐 ios::right
右对齐 ios::internal
数值右对齐,符号左对齐 ios::dec
ios::basefield
十进制 ios::oct
八进制 ios::hex
十六进制 ios::fixed
ios::floatfield
用定点小数表示浮点数 ios::scientific
用科学计数法表示浮点数格式标志位 说明
ios::showpos
正整数前面显示+号 ios::showbase
显示进制前缀0或0x ios::showpoint
显示小数点和尾数0 ios::uppercase
数中字母显示为大写 ios::boolalpha
用字符串表示布尔值 ios::unitbuf
每次插入都刷流缓冲 ios::skipws
以空白字符作分隔符- day_11_异常、I/O流
- I/O流与异常
- I/O流与异常
- Day46、异常、I/O流
- 异常处理和I/O流
- 异常,文件,I/O流知识小结
- 异常+文件+I/O流+设计模式
- I/O与异常
- I/O异常
- Python I/O 和 异常
- 第四章 Java的I/O流和异常处理
- Java I/O异常的处理
- Java异常处理和I/O处理
- I/O 流
- java I/O流
- c++I/O流
- I/O流
- java I/O流
- Java8自定义带泛型的函数式接口
- linux驱动模块组成
- 安装SQL server2008遇到的问题,最后安装SQL server2012
- 高斯消元求方案数 POJ-1830
- dubbox升级spring cxf版本冲突
- day_11_异常、I/O流
- Python机器学习笔记——监督学习
- $.post异步引起的接收不到返回数据包
- git_如何查看两个版本之间那些文件被修改
- 类中声明的函数和类的成员函数
- java.lang.IllegalArgumentException: Result Maps collection already contains value for
- IOS OC中使用Charts的半圆饼图 + 旋转指针
- 函数的声明、定义和调用
- Spring 技术内幕