15.4

//sale.h
#include<stdexcept>
#include<string>
class Sales
{
public:
	enum{MONTHS=12};
	class bad_index : public std::logic_error
	{
	private:
		int bi;
	public:
		explicit bad_index(int ix,const std::string &s="Index error in Sales object");
		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()const{return lbl;}
		   virtual ~nbad_index()throw(){}
	};
	explicit LabeledSales(const std::string &lb="none",int yy=0);
	LabeledSales(const std::string &lb,int yy,const double*gr,int n);
	virtual ~LabeledSales(){}
	const std::string &Label()const {return label;}
	virtual double operator[](int i)const;
	virtual double& operator[](int i);
private:
	std::string label;
};


//sale.cpp
#include"sale.h"
using std::string;
Sales::bad_index::bad_index(int ix,const string &s):std::logic_error(s),bi(ix)
{
}
Sales::Sales(int yy)
{
	year=yy;
	for(int i=0;i<MONTHS;++i)
		gross[i]=0;
}
Sales::Sales(int yy,const double *gr,int n)
{
	year=yy;
	int lim=(n<MONTHS)? n:MONTHS;
	int i;
	for(i =0;i<lim;++i)
		gross[i]=gr[i];
	for( ;i<MONTHS;++i)
		gross[i]=0;
}
double Sales::operator[](int i)const
{
	if(i<0||i>=MONTHS)
		throw bad_index(i);
	return gross[i];
}
double &Sales::operator[](int i)
{
	if(i<0||i>=MONTHS)
	throw (new bad_index(i));
	return gross[i];
}
LabeledSales::nbad_index::nbad_index(const string &lb,int ix,const string& s):Sales::bad_index(ix,s)
{
	lbl=lb;
}
LabeledSales::LabeledSales(const string &lb,int yy):Sales(yy)
{
	label=lb;
}
LabeledSales::LabeledSales(const string &lb,int yy,const double *gr,int n):Sales(yy,gr,n){
	label=lb;
}
double LabeledSales::operator[](int i)const
{
	if(i<0||i>MONTHS)
	throw nbad_index(Label(),i);
	return Sales::operator[](i);
}
double & LabeledSales::operator[](int i)
{
	if(i<0||i>=MONTHS)
		throw (new nbad_index(Label(),i));//加new 抛出指针
	return Sales::operator[](i);
}
//main.cpp
#include<iostream>
#include"sale.h"
int main()
{
	using std::cout;
	using std::cin;
	using std::endl;
	double vals1[12]={
		1120,1100,1122,2223,2123,3344,
		1212,1232,1232,1232,2313,1232
	};
	double vals2[12]={
		12,11,23,22,23,23,
		34,23,23,43,34,34
	};
	Sales sales1(2011,vals1,12);
	LabeledSales sales2("Blogstar",2021,vals2,12);
	cout <<"first try block:"<<endl;
	try{
		int i;
		cout <<"year= "<<sales1.Year()<<endl;
	for(int i= 0;i<12;++i)
	{
		cout<<sales1[i]<<' ';
		if (i%6==5)
			cout<<endl;
	}
	cout<<"		year="<<sales2.Year()<<endl;
	cout<<" label= "<<sales2.Label()<<endl;
	for(i=0;i<=12;++i)
	{
		cout<<sales2[i]<<' ';
		if(i%6==5)
		 cout<<endl;
	}
	cout<<"end of try block 1."<<endl;
	}
	catch(Sales::bad_index *bad)
	{
		LabeledSales::nbad_index *p;
		cout<<bad->what()<<endl;
		cout<<"bad index: "<<bad->bi_val()<<endl;
		if(p=dynamic_cast<LabeledSales::nbad_index *>(bad))
			cout<<"company :"<<p->label_val()<<endl;
	}
	cout<<"try block: "<<endl;
	try {
		sales2[2]=36;
		sales1[21]=33443;
		cout<<"end of try block 2"<<endl;
	}
	catch(Sales ::bad_index *bad)
	{
		LabeledSales::nbad_index *p;
		cout<<bad->what()<<endl;
		cout<<"bad index: "<<bad->bi_val()<<endl;
		if(p=dynamic_cast<LabeledSales::nbad_index*>(bad))
			cout<<" company:"<<p->label_val()<<endl;
	}
	cout<<"done"<<endl;
	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值