复习-文件操作流程:
-
step1.头文件要写fstream
#include
-
step2.定义一个file对象
fstream file; char arr[100];
-
step3.判断文件是否打开
if(file.is_open()){判断是否有文件,是继续,否退出}
-
step4.1 get put函数
for(int i=0;i<strlen(arr);++i){file.get(arr[i]);}
-
step4.2 write read函数
file.write(字符数组名,读取长度);
-
strp5 << >>
file<<“读入的字符”;
复习-字节流和字符流对比
字节流
- 保密性高,省内存,操作迅捷
字符流
- 贴近人的写法 外部可见 方便修改
异常:
定义: 在代码正确的前提下,运行时所遇到的一些错误
处理方式
- C通过返回值做异常处理(就是每次写函数之前都加的判断语句)并将异常返回给上级调用
C++处理方式: try-catch-throw
工作步骤:
-
step1.try{测试代码块;if(判断条件){为真 throw抛出异常;}}
-
step2.交给外部catch处理,如果处理不了,交给上级
-
step2.1 如果外部catch未能捕获这个异常,交给上级处理,直到问题解决 (如果一直无法解决,程序终止)
标准异常类——exception
- 头文件——stdexcept
- bad_alloc:new内存太多 导致内存申请失败
- out_of_range:数组越界 (C中没有检查数组越界的机制,所以需要自己写)
- bad_cast:使用不安全的dynamic_cast进行不安全的强制转换会抛出此异常
- ///…
说明:
- EOf=end of file 等价于 -1
- ASCII码不存在-1 因此文本文件不可能和-1相同的内容
- 对于存在多个异常抛出,程序是按个执行,只有上一个异常处理完成之后才会进行后面的代码
- 虚函数在父类中并没有实现功能,也就是一个接口,可以在子类中写新功能
代码实例
#include<iostream>
#include<fstream>
using namespace std;
void fun(int x, int y)
{
if (y == 0)
{
throw "被除数是0";//抛出的异常可以是任何类型
}
cout << x / y << endl;
}
//捕获异常
catch (int x) {}//捕获throw抛出的int型异常
catch (char *str)//捕获throw抛出的字符串类型异常
{
cout << str << endl;
cout << "请重新输入" << endl;
cin >> y;
fun(x, y);
}
catch (...) {}//捕获任何类型异常
cin.get();
cin.get();
return 0;
}