C++primer plus第六版课后编程题答案15.4
来源:互联网 发布:ping测试网络 编辑:程序博客网 时间:2024/04/27 17:14
sales.h
#ifndef STALES_h_#define STALES_h_#include <stdexcept>#include <string>using namespace std;class Sales{public:enum{MONTHS=12};private:double gross[MONTHS];int year;public:class bad_index:public logic_error{private:int bi;public:explicit bad_index(int ix,const string &s="Index error in Sales object\n");int bi_val()const {return bi;};virtual ~bad_index()throw(){};//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);};class LabeledSales:public Sales{private:string label;public:class nbad_index:public Sales::bad_index{private:string lbl;public:nbad_index(const string &lb,int ix,const string &s="Index error in LabeledSales object\n");const string &label_val()const{return lbl;};virtual ~nbad_index()throw(){};};explicit LabeledSales(const string &lb="none",int yy=0);LabeledSales(const string &lb,int yy,const double *gr,int n);virtual ~LabeledSales(){};const string &Label()const {return label;};virtual double operator[](int i)const;virtual double &operator[](int i);};#endif
sales.cpp
#include "sales.h"#include <iostream>using namespace std;Sales::bad_index::bad_index(int ix,const string &s):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++)//考虑n<months gross[i]=0;}double Sales::operator[](int i)const{if(i<0||i>=MONTHS)throw (new bad_index(i));//这样子才是抛出指针//throw *bad_index(i);//不能throw一个指针类型?return gross[i];}double &Sales::operator[](int i){if(i<0||i>=MONTHS)throw 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 nbad_index(Label(),i);throw (new nbad_index(Label(),i));return Sales::operator[](i);}
main154.cpp
#include <iostream>#include "sales.h"void main154(){double vals1[12]={1220,1100,1122,2212,1232,2334,2884,2393,3302,2922,3002,3544};double vals2[12]={12,11,22,21,32,34,28,29,33,29,32,35};Sales sales1(2011,vals1,12);LabeledSales sales2("Blogstar",2012,vals2,12);cout<<"First try block:"<<endl;try{int i;cout<<"Year="<<sales1.Year()<<endl;for(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;if(p=dynamic_cast<LabeledSales::nbad_index*>(bad)){cout<<p->what();cout<<"Company:"<<p->label_val()<<endl;cout<<"bad index:"<<p->bi_val()<<endl;//p->label_val();}else{cout<<bad->what();cout<<"bad index:"<<bad->bi_val()<<endl;//cout<<"bad index:"<<bad.bi_val()<<endl;}}try{sales2[12]=37.5;sales1[20]=23345;cout<<"Enter of try block 2"<<endl;}catch(Sales::bad_index *bad)//用指针{LabeledSales::nbad_index *p;if(p=dynamic_cast<LabeledSales::nbad_index*>(bad)){cout<<p->what();cout<<"Company:"<<p->label_val()<<endl;cout<<"bad index:"<<p->bi_val()<<endl;//p->label_val();}else{cout<<bad->what();cout<<"bad index:"<<bad->bi_val()<<endl;}}}
0 0
- C++primer plus第六版课后编程题答案15.4
- C++primer plus第六版课后编程题答案 6.1
- C++primer plus第六版课后编程题答案 6.2
- C++primer plus第六版课后编程题答案 6.3
- C++primer plus第六版课后编程题答案 6.4
- C++primer plus第六版课后编程题答案 6.5
- C++primer plus第六版课后编程题答案 6.6
- C++primer plus第六版课后编程题答案 6.7
- C++primer plus第六版课后编程题答案 6.8
- C++primer plus第六版课后编程题答案 6.9
- C++primer plus第六版课后编程题答案7.1
- C++primer plus第六版课后编程题答案7.2
- C++primer plus第六版课后编程题答案7.3
- C++primer plus第六版课后编程题答案7.4
- C++primer plus第六版课后编程题答案7.5
- C++primer plus第六版课后编程题答案7.6
- C++primer plus第六版课后编程题答案 7.7
- C++primer plus第六版课后编程题答案7.9
- hdu 1102 Constructing Roads 最小生成树
- [NOI2005]维修数列(SplayTree)
- OCP-1Z0-051 第48题 索引
- 堆排序总结【转】
- android MediaPlayer 的使用背景音乐的播放
- C++primer plus第六版课后编程题答案15.4
- OC基础—集合之NSSet、NSDictionary(字典)、NSMutableDictionary
- paip.输入法编程--英文ati化By音标原理与中文atiEn处理流程 python 代码为例
- paip.前端加载时间分析之道优化最佳实践
- paip.多维理念 输入法的外码输入理论跟文字输出类型精髓
- 2014-4-21
- 一个高效的敏感词过滤方法(PHP)
- 在Qt中如何写控制台程序-helloword
- paip.utf-8,unicode编码的本质输出unicode文件原理 python