目录
1.将数据以二进制形式放到磁盘
2.将上述的数据读入内存并且显示在显示器上面
3.异常处理机制
4.抛出异常的应用实例
1.将数据以二进制形式放到磁盘
(1)使用student定义结构体数组stud,并对其进行初始化,创建输出文件流对象outfile,这个对象是属于这个ofstream类的,打开方式是ios::binary的方式,表示的就是以二进制的方式打开一个文件,如果不指定方式就是默认的ASCII方式;
(2)如果这个打开失败的话,就输出错误信息,并且退出这个程序;
(3)如果原来就存在这个stud.dat文件,我们就会删除原来的数据,写入新的数据,没有这个文件就会创建这个文件,然后写数据;
(4)使用这个write函数向这个stud,dat文件里面输出数据,因为这个成员函数的第一个参数的类型是char*类型的,但是我们这个参数是结构体student*类型的,所以在这个地方应该进行强制类型转换;
成员函数的第二个参数是sizeof(stud[i])表示的是一次性输出的字节数,这个地方指的就是结构体数组一个元素的字节数;
(5)我们之前不创建这个文件的话,程序执行之后这个文件就会自动生成,我们可以通过下面的方式找到文件,并且查看里面的内容;
首先就是在这个文件里面找到这个创建的文件,其实这个文件就和我们的test.cpp在同一级目录下面,我们选择添加现有项,就可以看到这个文件,然后把这个文件添加进来;
这个时候我们已经添加进来了,但是这个时候我们无法打开,因为这个是二进制文件,我们可以使用二进制文件处理器进行这个处理之后再进行查看;
按照下面的,选择打开方式,然后选择这个二进制编辑器,这样的话,我们就可以看到我们之前的这个输入数据了;
2.将上述的数据读入内存并且显示在显示器上面
(1)这个是把文件里面的数据显示在这个显示器上面,我们还是创建一个对象infile对象,打开方式是ios::binary方式,和刚才的一样;
(2)然后我们进行的是这个read成员函数获取里面的数据,使用cout加上这个循环语句让这个原来的文件里面的结果显示在这个显示器上面;
3.异常处理机制
(1)异常处理机制就是我们经常说的抛异常,这个在我们的软件开发里面很常见,例如这个triangle这个函数是求这个三角形的面积,我们使用的是这个海伦公式,这个公式里面使用到了sqrt函数,这个函数就是用来求解这个算数平方根的;
(2)包含相应的头文件之后,我们就可以使用这个程序进行这个计算这个三角形的面积 ,但是这个前提是我们建立的这个三角形符合三角形的构成条件,如果用户输入的这个三角形的三条边很笨就不符合这个三角形的构成条件,我们这个时候就需要自己的进行这个对应的设置,因为这个程序是无法进行判断的,在这个情况下,如果我们输入这个2 2 4三边长度,这个显然是不符合这个三角形的构成条件的,我们借助这个来介绍一下这个抛出异常机制;
(3)抛出异常机制使用的是这个try catch语句,try语句是用来进行判断这个可能会出现问题的语句块,catch是用来捕获这个异常情况的;
(4)这样的话我们就可以使用这个机制对于这个是否构成三角形进行对应的判断,在这个triangle函数里面,我们使用这个if语句进行构成三角形三条边的条件判断,如果不符合这个三角形的三条边的构成条件,就会使用这个throw语句抛出异常;
(5)我们使用这个catch语句用来接收这个抛出的异常,需要注意的就是这个抛出异常的类型和接受异常的类型都应该是一样的,例如我们这里的就是string类型的;
4.抛出异常的应用实例
(1) 我们上面演示的是这个一个简单的判断三角形是否可以构成的的抛出异常机制,当我们可能会有多个异常的时候,我们可以把这些抛出的异常放到一个类里面去,这个样的话我们可以对于这个异常进行管理和接受;
当抛出的异常类型相同的时候,我们使用一个catch语句进行接收就已经可以了,但是这个抛出异常的类型和这个捕获异常的类型是一样的,当我们抛出的异常所属的类型不相同的时候,我们就需要使用多个catch语句进行这个异常的捕获(我们只需要知道这个在语法上面是允许通过的,也就是说在一个程序里面,并不是只能有一个try catch语句存在,是可以存在多个的);
(2)下面的这个案例是只存在一个的catch语句的捕获异常,但是他可能会抛出多个异常,但是这些抛出的异常的类型是一样的,我们只需要使用一个catch语句进行这个异常的捕获就可以了,我们以这个作为案例进行介绍这个抛出异常类的封装;
(3)使用的场景就是我们注册的时候填写自己的身份证号,名字,地址,以及这个密码,我们输入的身份证号不满18位就会抛出异常,密码不足八位的话就会抛出异常,我们可以自己输入并进行这个测试;
(4)我们定义了两个类,一个类里面就是这个基本的信息,另外的一个类就是包括的这个可能的异常情况,我们定义一个flag作为标记,如果这个过程里面出现异常情况,就会让这个flag变为1,如果这个flag变为1,我们就可以根据这个错误信息进行对应的打印;
我们在这个exceptions类里面定义这个flag,我们要想使用,就要先创建一个exceptions类的对象,然后在这个出现异常的时候进行这个错误信息的打印,并且给这个flag赋值为1;
因为这个抛出异常的类型都是相同的string类型的,因此我们可以使用一个catch语句进行这个异常的捕获即可。