sales.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // sales.h -- exceptions and inheritance
  2. #include <stdexcept>
  3. #include <string>
  4. class Sales
  5. {
  6. public:
  7. enum {MONTHS = 12}; // could be a static const
  8. class bad_index : public std::logic_error
  9. {
  10. private:
  11. int bi; // bad index value
  12. public:
  13. explicit bad_index(int ix,
  14. const std::string & s = "Index error in Sales object\n");
  15. int bi_val() const {return bi;}
  16. virtual ~bad_index() throw() {}
  17. };
  18. explicit Sales(int yy = 0);
  19. Sales(int yy, const double * gr, int n);
  20. virtual ~Sales() { }
  21. int Year() const { return year; }
  22. virtual double operator[](int i) const;
  23. virtual double & operator[](int i);
  24. private:
  25. double gross[MONTHS];
  26. int year;
  27. };
  28. class LabeledSales : public Sales
  29. {
  30. public:
  31. class nbad_index : public Sales::bad_index
  32. {
  33. private:
  34. std::string lbl;
  35. public:
  36. nbad_index(const std::string & lb, int ix,
  37. const std::string & s = "Index error in LabeledSales object\n");
  38. const std::string & label_val() const {return lbl;}
  39. virtual ~nbad_index() throw() {}
  40. };
  41. explicit LabeledSales(const std::string & lb = "none", int yy = 0);
  42. LabeledSales(const std::string & lb, int yy, const double * gr, int n);
  43. virtual ~LabeledSales() { }
  44. const std::string & Label() const {return label;}
  45. virtual double operator[](int i) const;
  46. virtual double & operator[](int i);
  47. private:
  48. std::string label;
  49. };