#include <stdexcept>
#include <cstring>
class Sales
{
public:
enum {MONTHS = 12} ; // Może być stalą statyczną
class bad_index: public std::logic_error
{
private:
int bi; //Zla wartość indeksu
public:
explicit bad_index(int ix,
const char * s = "Niepoprawny indeks w obiekcie klasy Sales\n");
int bi_val() const
{
return bi;
}
};
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 throw(std::logic_error);
virtual double & operator[](int i) throw(std::logic_error);
private:
double gross[MONTHS] ;
int year;
};
class LabeledSales : public Sales
{
public:
static const int STRLEN = 50; //Może być wyliczeniem
class nbad_index : public Sales::bad_index
{
private:
char lbl[STRLEN];
public:
nbad_index(const char * lb, int ix,
const char * s = "Niepoprawny indeks w obiekcie klasy LabeledSales\n");
const char * label_val()
{
return lbl;
}
};
explicit LabeledSales (const char * lb = "brak", int yy = 0 ) ;
LabeledSales (const char * ib, int yy, const double * gr, int n) ;
virtual ~LabeledSales() {}
const char * Label () const
{
return label;
}
virtual double operator[](int i) const throw(std::logic_error);
virtual double & operator[](int i) throw(std::logic_error);
private:
char label[STRLEN];
};
int main(){}
I2luY2x1ZGUgPHN0ZGV4Y2VwdD4KI2luY2x1ZGUgPGNzdHJpbmc+CmNsYXNzIFNhbGVzCnsKcHVibGljOgogICAgZW51bSB7TU9OVEhTID0gMTJ9IDsgLy8gTW/FvGUgYnnEhyBzdGFsxIUgc3RhdHljem7EhQogICAgY2xhc3MgYmFkX2luZGV4OiBwdWJsaWMgc3RkOjpsb2dpY19lcnJvcgogICAgewogICAgcHJpdmF0ZToKICAgICAgICBpbnQgYmk7IC8vWmxhIHdhcnRvxZvEhyBpbmRla3N1CiAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgYmFkX2luZGV4KGludCBpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHMgPSAiTmllcG9wcmF3bnkgaW5kZWtzIHcgb2JpZWtjaWUga2xhc3kgU2FsZXNcbiIpOwogICAgICAgIGludCBiaV92YWwoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGJpOwogICAgICAgIH0KICAgIH07CiAgICBleHBsaWNpdCBTYWxlcyhpbnQgeXkgPSAwICkgOwogICAgU2FsZXMoaW50IHl5LCBjb25zdCBkb3VibGUgKiBnciAsIGludCBuICkgOwogICAgdmlydHVhbCB+U2FsZXMgKCkgeyB9CiAgICBpbnQgWWVhciAoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiB5ZWFyOwogICAgfQogICAgdmlydHVhbCBkb3VibGUgb3BlcmF0b3JbXSAoaW50IGkpIGNvbnN0IHRocm93KHN0ZDo6bG9naWNfZXJyb3IpOwogICAgdmlydHVhbCBkb3VibGUgJiBvcGVyYXRvcltdKGludCBpKSB0aHJvdyhzdGQ6OmxvZ2ljX2Vycm9yKTsKcHJpdmF0ZToKICAgIGRvdWJsZSBncm9zc1tNT05USFNdIDsKICAgIGludCB5ZWFyOwp9OwogCmNsYXNzIExhYmVsZWRTYWxlcyA6IHB1YmxpYyBTYWxlcwp7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgU1RSTEVOID0gNTA7IC8vTW/FvGUgYnnEhyB3eWxpY3plbmllbQogICAgY2xhc3MgbmJhZF9pbmRleCA6IHB1YmxpYyBTYWxlczo6YmFkX2luZGV4CiAgICB7CiAgICBwcml2YXRlOgogICAgICAgIGNoYXIgbGJsW1NUUkxFTl07CiAgICBwdWJsaWM6CiAgICAgICAgbmJhZF9pbmRleChjb25zdCBjaGFyICogbGIsIGludCBpeCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzID0gIk5pZXBvcHJhd255IGluZGVrcyB3IG9iaWVrY2llIGtsYXN5IExhYmVsZWRTYWxlc1xuIik7CiAgICAgICAgY29uc3QgY2hhciAqIGxhYmVsX3ZhbCgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbGJsOwogICAgICAgIH0KICAgIH07CiAgICBleHBsaWNpdCBMYWJlbGVkU2FsZXMgKGNvbnN0IGNoYXIgKiBsYiA9ICJicmFrIiwgaW50IHl5ID0gMCApIDsKICAgIExhYmVsZWRTYWxlcyAoY29uc3QgY2hhciAqIGliLCBpbnQgeXksIGNvbnN0IGRvdWJsZSAqIGdyLCBpbnQgbikgOwogICAgdmlydHVhbCB+TGFiZWxlZFNhbGVzKCkge30KICAgIGNvbnN0IGNoYXIgKiBMYWJlbCAoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBsYWJlbDsKICAgIH0KICAgIHZpcnR1YWwgZG91YmxlIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHRocm93KHN0ZDo6bG9naWNfZXJyb3IpOwogICAgdmlydHVhbCBkb3VibGUgJiBvcGVyYXRvcltdKGludCBpKSB0aHJvdyhzdGQ6OmxvZ2ljX2Vycm9yKTsKcHJpdmF0ZToKICAgIGNoYXIgbGFiZWxbU1RSTEVOXTsKfTsKCmludCBtYWluKCl7fQ==