类型信息、异常、I/O流(day11)

时间:2022-06-02 14:27:42
二十三 运行时的类型信息
typeid运算符
#include <typeinfo>
typeid(类型/对象)
)返回typeinfo的对象,用于描述类型信息。
)在typeinfo类中包含了一个name()成员函数返回字符串形式类型信息。
)typeinfo类支持"=="、"!="的操作符重载,可以直接进行类型之间的比较,如果类型之间存在多态的继承关系,还可以利用多态的特性确定实际的对象类型。
eg:
cout << typeid(int).name() << endl;//i 动态类型转换dynamic_cast
语法:
目标类型变量 =
dynamic_cast<目标类型>(源类型变量);
场景:用于具有多态特性的父子类指针和引用之间进行显示的转换(向下造型)。
注:在转换过程中,会检查目标对象和期望转换的对象类型是否一致,如果一致转换成功,不一致转换失败。
如果转换的是指针,返回NULL表示失败,如果转换的是引用抛出异常"bad_cast"表示失败。 二十四 异常(Exception)
常见的错误
)语法错误
)逻辑错误
)功能错误
)设计缺陷
)需求不符
)环境异常
)操作不当 传统C中错误处理机制
)通过返回值表示错误
优点:函数调用路径中所有的栈对象,都能正确的被析构,不会内存泄露
缺点:错误处理流程比较复杂,逐层判断,代码臃肿 )通过远跳机制处理错误
优点:不需要逐层判断,一步到位错误处理,代码精炼
缺点:函数调用路径中的栈对象失去被析构的机会,有内存泄露的风险 C++异常机制
结合两种传统错误处理的优点,同时避免它们的缺点,在形式上实现一步到位的错误处理,同时保证所有栈对象能正确的被析构。 异常语法
)异常抛出
throw 异常对象;
eg:
throw -;
throw "File Error"; class FileError{};
throw FileError(...); )异常捕获
try{
可能发生异常的语句;
}
catch(异常类型1){
针对异常类型1的处理
}
catch(异常类型2){
针对异常类型2的处理
}
...
catch(...){
针对其它异常的处理
} 注:catch子句根据异常对象类型自上而下顺序匹配,因此对类类型的异常捕获要写到对基类类型的异常捕获的前面,否则子类的异常将被提前截获。 函数异常说明
)可以任何函数中增加异常说明,说明该函数所可能抛出的异常类型。
返回类型 函数名(形参表) throw(异常类型表){}
)函数的异常说明是一种承诺,表示该函数所抛出的异常不会超出说明的范围。如果函数抛出了异常说明以外的异常,则无法正常捕获,导致进程终止。
)异常说明极端形式
--》不写异常说明,表示可以抛出任何异常
--》空异常说明,throw(),表示不会抛出任何异常
)如果函数声明和定义分开,要保证异常说明的类型一致。 补充:函数重写要求
如果基类中的虚函数带有异常说明,那么该函数在子类中覆盖版本不能说明比基类抛出更多的异常,否则将因为"放松throw限定"而编译报错. 标准异常类
class exception{
public:
exception()throw(){}
virtual ~exception()throw(){}
virtual const char* what() const throw();
};
eg:
class A:public exception{
public:
const char* what() const throw(){
//...
return "Error A";
}
};
try{
throw A();
}
catch(exception& ex){
ex.what();//Error A
} 构造函数和析构函数中的异常
)构造函数抛出异常,该对象将会被不完整构造,这样对象的析构函数永远不会被自动执行。因此在构造函数抛出异常之前,需要手动销毁之前分配的动态资源。
)析构函数最好不要抛出异常 ---------------------------------
二十五 I/O流 //了解
主要的I/O流类
ios
/ \
istream ostream
/ | \ / | \
istrstream ifstream iostream ofstream ostrstream
/ \
strstream fstream
格式化I/O
)格式化函数
eg:
cout << /3.0 << endl;//3.33333
cout.precision();
cout << /3.0 << endl;//3.333333333
)流控制符
eg:
cout << /3.0 << endl;//3.33333
cout << setprecision() <<
/3.0 << endl;//3.333333333 字符串流
#include <strtstream>//过时
istrstream ostrstream strstream #include <sstream>//当前用的比较多
istringstream//读取内存,sscanf()
ostringstream//写入内存,sprintf()
stringstream //读写内存 文件流
#include <fstream>
ifstream //读取文件,fscanf
ofstream //写入文件,fprintf
fstream //读写文件 二进制I/O //fread、fwrite
ostream& ostream::write(
const char* buffer,size_t num); istream& istream::read(
char* buffer,streamsize num);

类型信息、异常、I/O流(day11)的更多相关文章

  1. 【转】【C&num;】异常类 Exception 枚举所有类型的异常

    一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...

  2. ndk学习之c&plus;&plus;语言基础复习----C&plus;&plus;容器、类型转换、异常与文件流操作

    继续来复习C++,比较枯燥,但是这是扎实掌握NDK开发的必经之路,不容小觑. 容器: 容器,就是用来存放东西的盒子. 常用的数据结构包括:数组array, 链表list, 树tree, 栈stack, ...

  3. &OpenCurlyDoubleQuote;RazorEngine&period;Templating&period;TemplateCompilationException”类型的异常在 RazorEngine&period;NET4&period;0&period;dll 中发生,但未在用户代码中进行处理

    错误信息: "RazorEngine.Templating.TemplateCompilationException"类型的异常在 RazorEngine.NET4.0.dll 中 ...

  4. JAVA类型信息——Class对象

    JAVA类型信息——Class对象 一.RTTI概要 1.类型信息RTTI :即对象和类的信息,例如类的名字.继承的基类.实现的接口等. 2.类型信息的作用:程序员可以在程序运行时发现和使用类型信息. ...

  5. ServerVersion 引发了&OpenCurlyDoubleQuote;System&period;InvalidOperationException”类型的异常

    遇到这样一个问题:添加互评信息,断点调试,跳转到BLL层后就直接跳到SqlHelper中弹出错误,说:未将对象设置引用到实例等.还请人帮忙调试代码,调试半天发现抽象工厂并没成功完成反射,奇怪的是:将出 ...

  6. 读书笔记 effective c&plus;&plus; Item 47 使用traits class表示类型信息

    STL主要由为容器,迭代器和算法创建的模板组成,但是也有一些功能模板.其中之一叫做advance.Advance将一个指定的迭代器移动指定的距离: template<typename IterT ...

  7. oracle有三种类型的异常错误: 预定义 &lpar; Predefined &rpar;错误里面的常见错误

    oracle有三种类型的异常错误: 预定义 ( Predefined )错误, 非预定义 ( Predefined )错误, 用户定义(User_define) 错误 预定义 ( Predefined ...

  8. Java基础 -- 深入理解Java类型信息&lpar;Class对象&rpar;与反射机制

    一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RT ...

  9. mvc 使用预置队列类型存储异常对象

    using PaiXie.Utils; using System; using System.Collections.Generic; using System.Linq; using System. ...

随机推荐

  1. Javascript学习笔记:闭包题解(2)

    代码: var name='The Window'; var object={ name:'My Object', getNameFunc:function(){ return function(){ ...

  2. 初始Java 第一课程DVD项目

    DVDSet 类: DVD DVD    删除功能 实现DVD借出功能 DVD还回功能

  3. Android菜鸟成长记12 -- ORMLite的简单使用

    在我们的开发中,为了提高开发效率,我们一般都会使用到框架,ormilte则是我们必不可少的数据库框架. 对于ORMLite我也是今天才刚刚接触,我们先从一个简单的项目来了解它吧. ORMLite ja ...

  4. ASP跨域调用Webservices方法

    仅用于记录与分享,直接贴代码: <script type="text/javascript"> function check(){ var title=$('#titl ...

  5. eclipse插件:打开选中文件所在的目录

    easyexplore是一个eclipse的小插件,它能直接打开选中文件所在的目录 下载: 地址:http://sourceforge.net/projects/easystruts/files/,我 ...

  6. Something about SeekingJob---TelInterview(电话面试)

    昨天和今天分别收到两次电话面试,有一点小小感悟,遂注之. 作为一枚还未毕业的大三狗来说,我在想,找个实习真的是西天取金,必定要先经历九九八十一难吗(伤心)?所以在这里整理了电话面试遇到的问题: 集合框 ...

  7. JVM 方法区内存扩大 以及开启GC

    因为应用使用了OSGi框架,<深入理解JAVA虚拟机>中对使用OSGi时可能产生的方法区溢出有所描述 第一部分: 第二部分 可见,OSGi会动态生成大量Class,在OSGi中,即使是同一 ...

  8. TortoiseSVN切换更改登录账号密码

    TortoiseSVN切换更改登录账号密码 方法: 在TortoiseSVN的设置对话框中,选择“已保存数据”,在“认证数据”那一行点击“清除”按钮,清楚保存的认证数据,再检出的时候就会重新跳出用户名 ...

  9. idea中搜狗输入法不跟随光标&comma;看不到输入的字

    好久没在windows上开发了,今天遇到一个比较坑的问题: 最新版idea,输入法都是最新的;但是idea里面输入字,看不到自己输入的是什么字,好坑... 在外面可以看到输入什么字说明与输入法无关, ...

  10. React安装React Devtools调试工具

    在运行一个React项目的时候浏览器控制台会提醒你去安装react devtools调试工具. Download the React DevTools for a better development ...