1.类型转换
1.1 静态类型转换 static_cast
1.1.1 语法为:static_cast<目标类型>(原对象)
1.1.2 对于内置数据类型,可以实现转换的
1.1.3 对于自定义数据类型,必须是父子之间的指针或者引用才能转换成功
1.2 动态类型转换 dynamic_cast
1.2.1 语法为: dynamic_cast<目标类型>(原对象)
1.2.2 对于内置数据类型,不可以实现转换
1.2.3 对于用户自定义数据类型
1.2.3.1 父类转子类--不安全--转换失败
1.2.3.2 子类转父类--安全的--转换成功
1.2.3.3 如果发生多态那么上述两种都是安全的,都可以成功
1.3 常量类型转换
1.3.1 关键字为const_cast
1.3.2 只能对指针、引用使用
1.4 重新解释类型转换
1.4.1 reinterpret_cast
1.4.2 不建议使用--不安全
2.异常的基本语法
2.1 分别有三个关键字try、throw、catch
2.2 try试图执行一段可能会出现异常的代码
2.3 throw出现异常后会抛出异常的关键字:throw + 类型
2.4 catch捕获某种类型异常:格式为catch(类型)
2.5 其他类型异常捕获应为 catch(。。。)
2.6 如果捕获到的异常不想处理想继续向上抛出用throw
2.7 异常必须要有人处理,如果没有处理程序会自动调用terminate函数,使程序中断
2.8 用户也可以抛出一个自定义类型的异常 例如 throw Preson()//Preson()是一个类的隐匿函数
3.栈解旋
3.1 从try代码块开始起步,到throw抛出异常前面,所有栈上的对象都被释放掉,释放的顺序和构造的顺序是相反的。
上述过程被称为---栈解旋
4.异常的接口声明
4.1 如果只允许函数体中抛出某种类型的异常,可以使用异常的接口声明
4.2 语法例如:void func()throw(类型A)//类型A异常的接口声明,如果throw(空)代表不允许抛出异常
5.异常变量的生命周期
5.1 例如一个类A,则A e;语句会调用拷贝构造函数
5.2 而A *a;指针方式,接收抛出 &A();匿名对象,该对象被释放掉,不可以再操作a了
5.3 而A &a;引用方式,接收抛出;建议用这种方式,可以节省开销
5.4 而A *a;指针方式,接收抛出 new A();堆区创建的对象,一定要记得手动释放 delete a
5.5 建议使用--引用方式--接收对象
6.异常的多态使用
6.1 提供一个基类A异常类,类内含有一个纯虚函数-virtual void func()=0;
6.2 提供两个子类B和C继承异常类A,再重写父类A中的纯虚函数、
6.3 进行测试,利用父类A引用去接收子类对象进而实现多态
6.4 根据抛出的异常,进而调用出现异常中的func()函数打印异常信息
7.系统表中异常的使用
7.1 使用之前要包含--标准异常头文件-:#include<stdexcpet>
7.2 使用系统异常类: 例如out_of_range("char *")
7.3 捕获异常语句:catch(A &a){cout << a.what();}
7.4 每一个异常都有一个what()方法调用
8.文件读写操作
8.1 读写头文件--fstream
8.2 写--ofstream ofs
8.2.1 ofs.open(),指定打开方式为:ios::out|ios::trunk
8.2.2 再判断是否打开成功 ofs.is_open
8.2.3 ofs<<"a"
8.2.4 最后关闭流对象 ofs.close()
8.3 读--ifstream ifs
8.3.1 指定打开方式为:ios::in
8.3.2 其次判断是否打开成功 ifs.open
8.3.3 读取文件数据有三种方式可供选择
8.3.4 关闭流对象 ifs.close();
C++每日学习笔记DAY9
最新推荐文章于 2024-11-02 14:41:43 发布