chapter5test4
2015-07-01 22:48
513 查看
累死我了,整个晚上都在写这一个程序,总算是出来了,thank Godness
ssale.h
#ifndef SALE_
#define SALE_
#include<stdexcept>
#include<string>
class sale
{
public:
enum{month=12};
private:
double gross[month];
int year;
public:
class bad_index :public std::logic_error
{
private:
int bin;
public:
explicit bad_index(int ix, const std::string &s= "Index error in sales objects.");
int bin_val() const{ return bin; }
virtual ~bad_index() throw(){}
};
explicit sale(int yy = 0);
sale(int yy, const double *gr, int n);
virtual ~sale(){}
int Year()const{ return year; }
virtual double &operator[](int i);
virtual double operator[](int i)const;
};
class label :public sale
{
private:
std::string lable;
public:
class nbad_index:public sale::bad_index
{
private:
std::string lbin;
public:
nbad_index(const std::string &lb,int ix, const std::string &s = "Index error in lable objects.");
const std::string &lable_val()const { return lbin; }
virtual ~nbad_index()throw(){}
};
explicit label(const std::string &lb = "none", int yy = 0);
label(const std::string &lb, int yy, const double *gr, int n);
virtual ~label(){}
const std::string &lable_val() const{ return lable; }
virtual double &operator[](int i);
virtual double operator[](int i)const;
};
#endif
sale.cpp
#include<iostream>
#include"sale.h"
using std::string;
sale::bad_index::bad_index(int ix, const std::string &s) :std::logic_error(s), bin(ix)
{
}
sale::sale(int yy)
{
year = yy;
gross[month] = { 0 };
}
sale::sale(int yy, const double *gr, int n)
{
year = yy;
int lim = (n < month) ? n : month;
int i;
for (i = 0; i < lim; i++)
gross[i] = gr[i];
}
double &sale::operator[](int i)
{
if (i<0 || i>month - 1)
throw (new bad_index(i));
return gross[i];
}
double sale::operator[](int i)const
{
if (i<0 || i>month - 1)
throw bad_index(i);
return gross[i];
}
label::nbad_index::nbad_index(const std::string &lb, int ix, const std::string &s) :sale::bad_index(ix,s)
{
lbin=lb;
}
label::label(const std::string &lb, int yy) : sale(yy)
{
lable = lb;
}
label::label(const std::string &lb, int yy, const double *gr, int n) : sale(yy, gr, n)
{
lable = lb;
}
double &label::operator[](int i)
{
if (i<0 || i>month - 1)
throw (new nbad_index(lable_val(),i));
return sale::operator[](i);
}
double label::operator[](int i)const
{
if (i<0 || i>month - 1)
throw nbad_index(lable_val(), i);
return sale::operator[](i);
}
user.cpp
#include<iostream>
#include<cstdlib>
#include"sale.h"
int main()
{
using namespace std;
double arr1[12] = { 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2019, 2010, 2011 };
double arr2[12] = { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
sale s1(2011, arr1, 12);
label s2("Blogstar", 2012, arr2, 12);
sale::bad_index *p1;
label::nbad_index *p2;
cout << "First try block :\n";
try{
int i;
cout << "Year =" << s1.Year() << endl;
for (i = 0; i < 12; ++i)
{
cout << s1[i] << ' ';
if (i % 6 == 5)
cout << endl;
}
cout << "Year= " << s2.Year() << endl;
cout << "Lable= " << s2.lable_val() << endl;
for (i = 0; i < 13; ++i)
{
cout << s2[i] << ' ';
if (i % 6 == 5)
cout << endl;
}
cout << "End of our try.\n";
}
catch (sale::bad_index *b)
{
label::nbad_index *p;
if (p = dynamic_cast<label::nbad_index *>(b))
{
cout<<p->what();
cout << "Company :" << p->lable_val() << endl;
cout << "Bad_index :" << p->bin_val() << endl;
}
else
{
cout << b->what();
cout << "Bad_index :" << b->bin_val() << endl;
}
}
cout << "Try next block :\n";
try{
s2[2] = 37.5;
s1[28] = 3008;
cout << "End of block 2 .\n";
}
catch (sale::bad_index *b)
{
label::nbad_index *p;
if (p = dynamic_cast<label::nbad_index *>(b))
{
cout<<p->what();
cout << "Company :" << p->lable_val() << endl;
cout << "Bad_index :" << p->bin_val() << endl;
}
else
{
cout << b->what();
cout << "Bad_index :" << b->bin_val() << endl;
}
}
cout << "Done !\n";
return 0;
}
ssale.h
#ifndef SALE_
#define SALE_
#include<stdexcept>
#include<string>
class sale
{
public:
enum{month=12};
private:
double gross[month];
int year;
public:
class bad_index :public std::logic_error
{
private:
int bin;
public:
explicit bad_index(int ix, const std::string &s= "Index error in sales objects.");
int bin_val() const{ return bin; }
virtual ~bad_index() throw(){}
};
explicit sale(int yy = 0);
sale(int yy, const double *gr, int n);
virtual ~sale(){}
int Year()const{ return year; }
virtual double &operator[](int i);
virtual double operator[](int i)const;
};
class label :public sale
{
private:
std::string lable;
public:
class nbad_index:public sale::bad_index
{
private:
std::string lbin;
public:
nbad_index(const std::string &lb,int ix, const std::string &s = "Index error in lable objects.");
const std::string &lable_val()const { return lbin; }
virtual ~nbad_index()throw(){}
};
explicit label(const std::string &lb = "none", int yy = 0);
label(const std::string &lb, int yy, const double *gr, int n);
virtual ~label(){}
const std::string &lable_val() const{ return lable; }
virtual double &operator[](int i);
virtual double operator[](int i)const;
};
#endif
sale.cpp
#include<iostream>
#include"sale.h"
using std::string;
sale::bad_index::bad_index(int ix, const std::string &s) :std::logic_error(s), bin(ix)
{
}
sale::sale(int yy)
{
year = yy;
gross[month] = { 0 };
}
sale::sale(int yy, const double *gr, int n)
{
year = yy;
int lim = (n < month) ? n : month;
int i;
for (i = 0; i < lim; i++)
gross[i] = gr[i];
}
double &sale::operator[](int i)
{
if (i<0 || i>month - 1)
throw (new bad_index(i));
return gross[i];
}
double sale::operator[](int i)const
{
if (i<0 || i>month - 1)
throw bad_index(i);
return gross[i];
}
label::nbad_index::nbad_index(const std::string &lb, int ix, const std::string &s) :sale::bad_index(ix,s)
{
lbin=lb;
}
label::label(const std::string &lb, int yy) : sale(yy)
{
lable = lb;
}
label::label(const std::string &lb, int yy, const double *gr, int n) : sale(yy, gr, n)
{
lable = lb;
}
double &label::operator[](int i)
{
if (i<0 || i>month - 1)
throw (new nbad_index(lable_val(),i));
return sale::operator[](i);
}
double label::operator[](int i)const
{
if (i<0 || i>month - 1)
throw nbad_index(lable_val(), i);
return sale::operator[](i);
}
user.cpp
#include<iostream>
#include<cstdlib>
#include"sale.h"
int main()
{
using namespace std;
double arr1[12] = { 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2019, 2010, 2011 };
double arr2[12] = { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
sale s1(2011, arr1, 12);
label s2("Blogstar", 2012, arr2, 12);
sale::bad_index *p1;
label::nbad_index *p2;
cout << "First try block :\n";
try{
int i;
cout << "Year =" << s1.Year() << endl;
for (i = 0; i < 12; ++i)
{
cout << s1[i] << ' ';
if (i % 6 == 5)
cout << endl;
}
cout << "Year= " << s2.Year() << endl;
cout << "Lable= " << s2.lable_val() << endl;
for (i = 0; i < 13; ++i)
{
cout << s2[i] << ' ';
if (i % 6 == 5)
cout << endl;
}
cout << "End of our try.\n";
}
catch (sale::bad_index *b)
{
label::nbad_index *p;
if (p = dynamic_cast<label::nbad_index *>(b))
{
cout<<p->what();
cout << "Company :" << p->lable_val() << endl;
cout << "Bad_index :" << p->bin_val() << endl;
}
else
{
cout << b->what();
cout << "Bad_index :" << b->bin_val() << endl;
}
}
cout << "Try next block :\n";
try{
s2[2] = 37.5;
s1[28] = 3008;
cout << "End of block 2 .\n";
}
catch (sale::bad_index *b)
{
label::nbad_index *p;
if (p = dynamic_cast<label::nbad_index *>(b))
{
cout<<p->what();
cout << "Company :" << p->lable_val() << endl;
cout << "Bad_index :" << p->bin_val() << endl;
}
else
{
cout << b->what();
cout << "Bad_index :" << b->bin_val() << endl;
}
}
cout << "Done !\n";
return 0;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析
- C++使用CriticalSection实现线程同步实例