C++ Primer 5th笔记(chap 19 特殊工具与技术)异常类层次
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 19 特殊工具与技术)异常类层次相关的知识,希望对你有一定的参考价值。
1.
- 类 exception 、 bad_cast 和 bad_alloc 定 义 了 默 认 构 造 函 数
- runtime_error 和 logic_error没有默认构造函数, 但是有一个可以接受 C 风格字符串或者标准库 string类型实参的构造函数
1.1 exception 定义的函数
- 拷贝构造函数
- 拷贝赋值运算符
- 一个虚析构函数
- 一个名为 what 的虚成员。
what 函数返回一个 const char*,该指针指向一个以null结尾的字符数组, 并且确保不会抛出任何异常
eg.
class out_of_stock:public std::runtime_error
{
public:
explicit out_of_stock(const std::string &s):std::runtime_error(s){}
};
class isbn_mismatch:public std::logic_error
{
public:
explicit isbn_mismatch(const std::string &s):std::logic_error(s){}
isbn_mismatch(const std::string &s,const std::string &rhs,const std::string &lhs): std::logic_error(s),left(lhs),right(rhs){}
const std::string left,right;
}
1.2 使用我们自己的异常类型
Sales_data& Sales_data::operator+(const Sales_data& rhs)
{
if(isbn()!=rhs.isbn())
throw isbn_mismatch("Wrong isbns",isbn(),rhs.isbn());
units_sold+=rhs.units_sold;
revenue+=rhs.revenue;
return *this;
}
Sales_data item1,item2,sum;
while(cin>>item1>>item2)
{
try{
sum=item1+item2;
}
catch(const isbn_mismatch &e)
{
cerr<<e.what()<<":left isbn("<<e.left<<")right isbn("<<e.right<<")"<<endl;
}
}
以上是关于C++ Primer 5th笔记(chap 19 特殊工具与技术)异常类层次的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 19 特殊工具与技术)malloc 函数与 free 函数
C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配
C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI
C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid