设为首页收藏本站 |天气与日历| 2025-07-02 星期三 01:56:00 乙巳(蛇)年 六月初八 丑时
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 213|回复: 0

C++的一些语法特性.九

[复制链接]

954

主题

954

帖子

3879

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3879
发表于 2022-1-14 12:58:42 | 显示全部楼层 |阅读模式

[C] 纯文本查看 复制代码
01-课程回顾_.avi
02-静态类型转换_.avi
03-动态类型转换_.avi
04-常量转换和重新解释转换_.avi
05-异常的基本语法_.avi
06-栈解旋_.avi
07-异常的接口声明_.avi
08-异常变量的生命周期_.avi
09-异常的多态使用_.avi
10-系统标准异常_.avi
11-编写自己的异常类_.avi
12-标准输入流(上)_.avi
13-标准输入流(下)_.avi
14-标准输出流_.avi
15-文件读写_.avi[



1 类型转换

1.1 静态类型转换  static_cast

1.1.1 允许内置数据类型转换

1.1.2 允许父子之间的指针或者引用的转换

1.1.3 语法 static_cast<目标类型>(原变量/原对象)

1.2 动态类型转换  dynamic_cast

1.2.1 不允许内置数据类型转换

1.2.2 允许父子之间指针或者引用的转换

1.2.2.1 父转子  不安全的  转换失败

1.2.2.2 子转父  安全   转换成功

1.2.2.3 如果发生多态,总是安全,可以成功

1.2.3 语法 dynamic_cast<目标类型>(原变量/原对象)

1.3 常量转换   const_cast

1.3.1 只允许 指针或者引用 之间转换

1.3.2 语法 const _cast<目标类型>(原变量/原对象)

1.4 重新解释转换

1.4.1 reinterpret_cast 最不安全一种转换,不建议使用

2 异常的基本语法

2.1 C++异常的处理关键字

2.1.1 try  throw  catch

2.2 可以出现异常的代码 放到 try块

2.3 利用throw抛出异常

2.4 利用catch捕获异常

2.5 catch( 类型) 如果想捕获其他类型 catch(…)

2.6 如果捕获到的异常不想处理,而继续向上抛出,利用 throw

2.7 异常必须有函数进行处理,如果都不去处理,程序自动调用 terminate函数,中断掉

2.8 异常可以是自定义数据类型

3 栈解旋

3.1 从try代码块开始,到throw抛出异常之前,所有栈上的数据都会被释放掉,

3.2 释放的顺序和创建顺序相反的,这个过程我们称为栈解旋

4 异常的接口声明

4.1 在函数中 如果限定抛出异常的类型,可以用异常的接口声明

4.2 语法: void func()throw(int ,double)

4.3 throw(空)代表 不允许抛出异常

5 异常变量的生命周期

5.1  //抛出的是 throw MyException();  catch (MyException e) 调用拷贝构造函数 效率低

5.2  //抛出的是 throw MyException();  catch (MyException &e)  只调用默认构造函数 效率高 推荐

5.3  //抛出的是 throw &MyException(); catch (MyException *e) 对象会提前释放掉,不能在非法操作

5.4  //抛出的是 new MyException();   catch (MyException *e) 只调用默认构造函数 自己要管理释放

6 异常的多态使用

6.1 提供基类异常类

6.1.1 class BaseException

6.1.2 纯虚函数  virtual void printError() = 0;

6.2 子类空指针异常 和  越界异常 继承 BaseException

6.3 重写virtual void printError()

6.4 测试 利用父类引用指向子类对象

7 系统标准异常

7.1 引入头文件  #include <stdexcept>

7.2 抛出越界异常 throw out_of_range(“…”)

7.3 获取错误信息  catch( exception & e )     e.what();

8 编写自己的异常类

8.1 编写myOutofRange 继承 Exception类

8.2 重写 virtual const char *  what() const

8.3 将sting 转为 const char *

8.3.1  .c_str()

8.4 const char * 可以隐式类型转换为 string  反之不可以

8.5 测试,利用多态打印出错误提示信息

9 标准输入流

9.1 cin.get() 获取一个字符

9.2 cin.get(两个参数) 获取字符串

9.2.1 利用cin.get获取字符串时候,换行符遗留在缓冲区中

9.3 cin.getline() 获取字符串

9.3.1 利用cin.getline获取字符串时候,换行符不会被取走,也不在缓冲区中,而是直接扔掉

9.4 cin.ignore() 忽略 默认忽略1个字符, 如果填入参数X,代表忽略X个字符

9.5 cin.peek()  偷窥  

9.6 cin.putback()  放回 放回原位置

9.7 案例1

9.7.1 判断用户输入的内容 是字符串还是数字

9.8 案例2

9.8.1 用户输入 0 ~ 10 之间的数字,如果输入有误,重新输入

9.8.2 标志位  cin.fail()   0代表正常  1代表异常

9.8.3 cin.clear()  cin.sync() 清空缓冲区 重置标志位

10 标准输出流

10.1 cout.put() //向缓冲区写字符

10.2 cout.write() //从buffer中写num个字节到当前输出流中。

10.3 通过 流成员函数 格式化输出

10.3.1  int number = 99;

10.3.2  cout.width(20); //指定宽度为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 通过控制符  格式化输出

10.4.1 int number = 99;

10.4.2  cout << setw(20)     //设置宽度

10.4.3  << setfill('~')  //设置填充

10.4.4  << setiosflags(ios::showbase)  //显示基数

10.4.5  << setiosflags(ios::left)  //设置左对齐

10.4.6  << hex   //显示十六进制

10.4.7  << number

10.4.8  << endl;

10.4.9 引入头文件  #include< iomanip>

11 文件读写

11.1 头文件  #inlcude < fstream>

11.2 写文件  

11.2.1  ofstream  ofs (文件路径,打开方式  ios::out )

11.2.2 判断文件是否打开成功  ofs.is_open

11.2.3 ofs << “…”

11.2.4 关闭文件  ofs.close();

11.3 读文件

11.3.1 ifstream  ifs(文件路径,打开方式  ios::in)

11.3.2 判断文件是否打开成功  ofs.is_open

11.3.3 利用4种方式 对文件进行读取

11.3.4 关闭文件  ifs.close();

12
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-7-2 01:56 , Processed in 0.082301 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表