Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- class komunikator{
- public:
- static int liczba_obiektow;
- komunikator(){liczba_obiektow++;}
- virtual ostream& wyswietl(ostream& out) const = 0;
- virtual void operator+=(const string& a) const = 0;
- virtual ~komunikator(){liczba_obiektow--;}
- };
- int komunikator::liczba_obiektow = 0;
- class k1 : public komunikator{
- protected:
- string * t;
- public:
- k1(): t(new string("---")){}
- k1(const string& a1): t(new string(a1)){}
- k1(const k1& r): t(new string(*r.t)){}
- k1& operator=(const k1& r){
- if(this!=&r){
- delete t;
- t = new string(*r.t);
- }
- return *this;
- }
- void operator+=(const string& a) const{
- *t += a;
- }
- ostream& wyswietl(ostream& out)const {return out << *t;}
- ~k1(){delete t;}
- };
- class k2 : public k1{
- int l;
- public:
- k2(): l(0){}
- k2(const string& a1, const int& a2): k1(a1), l(a2){}
- ostream& wyswietl(ostream& out)const {
- if(*t == "---" && l == 0)throw string("Brak danych\n");
- return out << *t << ' ' << l;}
- };
- ostream& operator<<(ostream& out, const komunikator& r){
- return r.wyswietl(out) << endl;
- }
- int main(){
- const k1 koniec("Koniec komunikatow");
- komunikator *linia[5];
- linia[0] = new k1("Temperatury powietrza");
- linia[1] = new k2("Czestochowa", -5);
- linia[2] = new k1("Opady sniegu");
- linia[3] = new k2("Katowice", 10);
- linia[4] = new k1(koniec);
- for(int i = 0; i < 5; i++){
- cout << *linia[i];
- }
- cout << "************* 3 ************" << endl;
- *linia[0] += " [oC]:";
- *linia[2] += " [cm]:";
- for(int i = 0; i < 5; i++){
- cout << *linia[i];
- delete linia[i];
- }
- cout << "************* 4 ************" << endl;
- cout << "Liczba dzialajacych komunikatorow: " << komunikator::liczba_obiektow << endl;
- linia[0] = new k1("Temperatury powietrza");
- linia[1] = new k2;
- linia[2] = new k1("Opady sniegu");
- linia[3] = new k2;
- linia[4] = new k1(koniec);
- cout << "Liczba dzialajacych komunikatorow: " << komunikator::liczba_obiektow << endl;
- for(int i = 0; i < 5; i++){
- try{cout << *linia[i];}catch(const string& e){cout << e;}
- delete linia[i];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement