-
类型转换
1.1 静态转换 static_cast(包括基础数据类和父子关系的类)
1.1.1使用方式 static_cast<目标类型>(原始数据)
1.1.2可以进行基础数据类型转换 double int
1.1.3没有父子关系的自定义类型的不可以转换:注意内存泄漏,向上安全,向下转安全
1.2 动态类型转换 dynamic_cast<>()
1.2.1基础类型不可以进行类型转换
1.2.2 父子之间可以进行转换
父转子可以
子转父不可以
发生多态都可以
1.3 常量类型转换 const_cast<>()
1.3.1 不能对非指针或者非引用进行类型转换
1.3.2 重新解释转换 reinterpret_cast<>()
最不安全,最鸡肋 -
异常
2.1 try 试图执行 try{}中的内容
2.2 在可能出现异常的地方 抛出异常 throw
2.3 try 下面catch 捕获异常
2.4catch(捕获类型)…代表 所有的其他类型
2.5 如果不想处理异常,继续向上抛出异常 throw
2.6如果没有任何处理异常的地方,那么成员函数调用terminate函数,中断。
2.7自定义异常类,可以抛出自定义的对象,捕获匿名的自定义对象 -
栈解旋
3.1 从try开始 到throw抛出异常之前 所有栈上的对象 都会被释放 这个过程称为栈解旋
3.2 栈上对象的构造顺序与析构顺序相反 -
异常接口的声明
4.1如果想抛出特定的异常类型,可以利用异常的接口声明
4.2void func() throw(int) 只能抛出int 类型
4.3 throw() 不抛出任何异常类型 -
异常变量的声明周期
5.1如果 myException e,会多开销一份数据,调用拷贝构造。
5.2如果 myException *e,不new 提前释放对象,new自己管理delete
5.3 推荐 myException &e ,容易些,只产生一部分数据,而且会自己释放 -
异常的多态使用
6.1 利用多态来实现 printerror 同一个接口调用
6.2 抛出不同的错误对象 -
使用系统标准异常
7.1 #include
7.2 throw out_of_range(“aaa”)
7.3 catch(out_of_range &e){e.what()}
7.4 throw length_error(“aaa”)
7.5 catch(length_error &e){e.what()} -
编写自己的异常类
8.1自己的异常类 需要继承于 excpetion
8.2 重写 虚析构 what()
8.3 内部维护以错误信息 字符串
8.4 构造的时候传入 错误信息字符串,在what返回错误信息
8.5 string 转 char* .c_str(); -
标准的输入流
9.1 cin.get 缓冲区中读取一个字符
9.2 cin.get(两个参数) 不读换行符
9.3 cin.getline()读取换行,并且扔掉
9.4 cin.ignore(N),忽略掉第N个字符
9.5 cin.peek 偷窥 偷看第一个字符然后放回去
9.6 cin.putback 放回 把字符放回缓冲区 -
输入流案例
10.1判断用户输入的是字符串还是数字 利用偷窥 或者放回
10.2 让用户输入指定范围内的数字,如果输入不正确,重新输入
10.2.1 cin.fall() 看标志位 0正常 1 不正常
10.2.2 cin.clear() 重置标志位
10.2.3 cin.syne()清空 -
标准的输出流
11.1 流对象的成员函数
11.1.1 cout<<“aaa”<<endl;
11.1.2 cout.put(‘a’)向缓冲区写字符
11.1.3 cout.write(buf,size) //从buf中写num个字符到当前的输出流中
11.1.4 cout.width(20)
11.1.5 cout.fill('')
11.1.6 cout.setf(ios::left) //设置格式,输出内容做对齐
11.1.7 cout.setf(ios::dec)//卸载十进制
11.1.8 cout.setf(ios::hex);//安装16进制
11.1.9cout.setf(ios::showbase) //强制输出整数基数
11.1.10 cout.unsetf(ios::hex)
11.1.11cout.setf(ios:oct);
11.2 控制符
int number=99;
cout<<setw(20);
<<setfill("");
<<setiosflags(ios::showbase)//基数
<<setiosflags(ios::left)//左对齐
<<hex //十六进制
<<number<<endl; -
文件操作 #include
12.1写文件
12.1.1 ofstream ofs
12.1.2 open指定打开方式
12.1.3 isopen判断是否打开成功
12.1.4ofs<<“数据”
12.1.5ofs.close
12.2读文件
12.2.1ifstream ifs
12.2.2 指定打开方式 iOS::in
12.2.3 isopen判断是否打开成功
12.2.4 输出方式
//第一种方式
//char buf[1024];
//while (ifs >> buf)
//{
// cout << buf << endl;
//}
/////////////////////
char buf[1024];
while (!ifs.eof())
{
ifs.getline(buf, sizeof(buf));
cout << buf << endl;
}
12.2.5 ifs.close