【c++基础】笔记(九)
来源:互联网 发布:众信金融网络借贷 编辑:程序博客网 时间:2024/06/16 14:04
1 类型转换
1.1 静态类型转换 static_cast
1.1.1 父子类之间的指针或者引用可以转换
1.1.2 基础数据类型也可以转换
1.1.3 无父子关系的类之间不可以转换
1.2 动态类型转换 dynamic_cast
1.2.1 父子类之间的指针或者引用的转换
1.2.2 基础数据类型 不可以转换
1.2.3 父转子 不安全 不可以转换
1.2.4 子转父 安全 可以转
1.2.5 如果发生多态 总是安全的可以转换
1.3 常量转换 const_cast
1.3.1 加const或者移除const
1.3.2 只能对指针或者引用之间 做转换操作
1.4 重新解释转换 reinterpret_cast
1.4.1 最不安全 不建议使用
2 异常的基本语法
2.1 try 尝试 执行 try里面的代码块
2.2 如果抛出异常 可以利用 catch捕获异常
2.3 抛出异常关键字 throw 类型
2.4 catch(类型)
2.5 捕获其他类型 catch(…)
2.6 异常如果捕获到了 ,不处理 继续向上抛出 ,throw
2.7 如果异常没有任何处理,程序会跳跃terminate函数,使程序中断掉
2.8 可以创建自己的异常类型,进行捕获
3 栈解旋
3.1 从try代码开始后,到throw抛出异常前,栈上的内容都会被释放掉,这个过程就称为栈解旋
4 异常的接口声明
4.1 Qt或者Linux下可以做测试VS下没有这个机制
4.2 void func() throw(int) 只许抛出int类型异常
4.3 任何类型异常都不抛出 throw()
5 异常变量生命周期
5.1 三种方式创建
5.1.1 catch (MyException e) 多一份开销,调用拷贝构造
5.1.2 catch (MyException &e) 提高效率,节省一份开销 推荐使用
5.1.3 catch (MyException *e)
5.1.3.1 throw &MyException() 提前释放掉对象,导致结果不正常
5.1.3.2 throw new MyException() 逻辑正常,但是要自己去管理释放
6 异常多态使用
6.1 利用BaseException写了一个抽象类
6.1.1 抽象类中写了一个printError方法
6.2 派生类
6.2.1 空指针异常类
6.2.2 越界异常类
6.2.3 必须重新实现 printError方法
6.3 抛出异常 throw 空指针异常 或者 抛出 越界异常
6.4 捕获异常 BaseException &e
6.4.1 打印信息 e.printError();
6.5 系统内部处理也是利用多态去做的处理
7 使用系统标准异常
7.1 头文件 stdexcept
7.2 throw out_of_range(char *)
7.3 catch(out_of_range & e)
7.4 e.what() 返回char*
8 编写自己的异常类
8.1 重写exception中 析构 ,what方法
8.2 内部维护 string errorInfo 维护错误的信息
8.3 创建myoutofrangeexception类,抛出自己的异常对象
8.4 捕获时候 可以打印内部的what返回的字符串
8.5 重写 const char * what() const
9 标准的输入流
9.1 cin.get()
9.1.1 获取一个字符
9.2 cin.get(buf,1024)获取字符串
9.2.1 将换行符留在缓冲区中
9.3 cin.getline()
9.3.1 将换行符 拿走,并且抛弃掉,不留在缓冲区中
9.4 cin.ignore
9.4.1 忽略
9.4.2 默认忽略1个字符
9.4.3 cin.ignore(N) 忽略N个字符
9.5 cin.peek() 偷窥
9.5.1 可以偷窥一个字符,并不会从缓冲区中拿走字符
9.6 cin.putback
9.6.1 放回 ,将拿走的字符放回到缓冲区中
9.7 输入流的案例
9.7.1 判断用户输入的是数字还是字符串
9.7.1.1 利用cin.peek 或者 cin.putback
9.7.2 让用户输入0~10的数字,如果输入有误,重新输入,直到输入正确为止
9.7.3 cin.fail 标志位 0 正常1异常
9.7.4 cin.clear() 重置标志位
9.7.5 cin.sync() 清空缓冲区
10 标准的输出流
10.1 cout.put(‘a’).put(‘b’)
10.2 cout.write() 输出字符串
10.3 流对象的成员函数
10.3.1 int number = 99;
10.3.2 cout.width(20); // 预留位置
10.3.3 cout.fill('*'); //填充符号
10.3.4 cout.setf(ios::left); //设置格式 为左对齐
10.3.5 cout.unsetf(ios::dec); //卸载十进制
10.3.6 cout.setf(ios::hex); //安装十六进制
10.3.7 cout.setf(ios::showbase); //显示基数
10.3.8 cout.unsetf(ios::hex); //卸载十六进制
10.3.9 cout.setf(ios::oct); //安装八进制
10.3.10 cout << number << endl;
10.4 控制符方式 头文件 iomanip
10.4.1 cout << setw(20)
10.4.2 << setfill('~') //设置填充
10.4.3 << setiosflags(ios::showbase) //设置基数
10.4.4 << setiosflags(ios::left) //左对齐
10.4.5 << hex //安装16进制
10.4.6 << number
10.4.7 << endl;
11 文件的读写操作
11.1 写
11.1.1 头文件 fstream
11.1.2 对象 ofstream ofs
11.1.3 ofstream.open( 文件路径, 打开模式)
11.1.4 is_open 判断是否打开成功
11.1.5 ofs << “内容”
11.1.6 ofs.close() 关闭流对象
11.2 读
11.2.1 对象 ifstream ifs
11.2.2 open(文件路径,打开模式)
11.2.3 is_open 判断是否打开成功
11.2.4 三种方式都可以读取内容
11.2.5 ifs.close() 关闭流对象
12
- 【c++基础】笔记(九)
- Objective-C基础学习笔记(九)-Foundation
- 零基础学C语言 笔记九 字符串
- C语言基础(九)- 链表
- Android基础笔记(九)- 广播
- Android基础笔记(九)- 广播
- HTML5基础学习笔记(九)
- C语言学习笔记(九)--函数
- c++Primer笔记(八,九)
- C语言程序学习(九)笔记
- C学习笔记(九)指针
- 黑马程序员-iOS基础-Objective-C基础(九)
- C语言基础(九)结构体、补充typedef用法
- c语言基础(九)结构体指针
- Objective-C(基础篇)九大基本类型
- 零基础小白JAVA学习笔记(九)
- 笔记整理(java基础九-----String,StringBuffer,StringBuilder)
- 黑马程序员:iOS基础——个人笔记(九)
- ztree入门应用(二)
- 腾讯2017暑期实习生编程题
- 【c++基础】笔记(八)
- Centos7 安装配置 VNCserver
- centos 升级mysql 5.1 到5.6(及rpm安装可能启动不了问题)
- 【c++基础】笔记(九)
- ztree入门应用总结
- Centos mysql 创建用户
- 堆和栈的区别
- IIS Windows 集成身份验证弹出输入用户名密码的解决办法
- RxJava使用场景小结
- Windows 运行 pyspider 显示 python已崩溃
- RICH EDIT 控件 SDK 参考手册
- 去除display:inline-block元素之间间距的方法