c++ primer plus 第15章友,异常和其他,15.3.9异常、类和继承
15.3.9异常、类和继承
文章目录
15.3.9异常、类和继承
异常、类和继承以三种方式相互关联。首先,可以像标准C++库所做的那样,从一个异常类派生出另-其次,可以在类定义中嵌套异常类声明来组合异常;第三,这种嵌套声明本身可被继承,还可用作基类。个;程序清单 15.14带领我们开始了上述一些可能性的探索之旅。这个头文件声明了一个 Sales类,它用于存储一个年份以及一个包含 12个月的销售数据的数组。LabeledSales 类是从 Sales 派生而来的,新增了一个用于存储数据标签的成员。
程序清单15.14 sales.h
// sales.h -- exceptions and inheritance
#include <stdexcept>
#include <string>
class Sales
{
public:
enum {
MONTHS = 12}; // could be a static const
class bad_index : public std::logic_error
{
private:
int bi; // bad index value
public:
explicit bad_index(int ix,
const std::string & s = "Index error in Sales object\n");
int bi_val() const {
return bi;}
virtual ~bad_index() throw() {
}
};
explicit Sales(int yy = 0);
Sales(int yy, const double * gr, int n);
virtual ~Sales() {
}
int Year() const {
return year; }
virtual double operator[](int i) const;
virtual double & operator[](int i);
private:
double gross[MONTHS];
int year;
};
class LabeledSales : public Sales
{
public:
class nbad_index : public Sales::bad_index
{
private:
std::string lbl;
public:
nbad_index(const std::string & lb, int ix,
const std::string & s = "Index error in LabeledSales object\n");
const std::string & label_val<