【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_rangechar *

7.3 catchout_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(buf1024)获取字符串

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 

原创粉丝点击