Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Lik {
- protected:
- double specificna_tezina;
- public:
- Lik(double specificna_tezina) : specificna_tezina(specificna_tezina){}
- virtual void Ispisi() const = 0;
- virtual Lik *DajKopiju() const =0;
- double DajSpecificnuTezinu() const {return specificna_tezina; }
- virtual double DajZapreminu() const { return 0;}
- };
- class Kvadar : public Lik
- {
- double a, b, c;
- public:
- Kvadar(double a, double b, double c, double spec_tez) : a(a), b(b), c(c), Lik(spec_tez){}
- Lik *DajKopiju() const override { return new Kvadar(*this); }
- double DajZapreminu() const override { return a*b*c; }
- double DajTezinu() const { return this->DajZapreminu()*specificna_tezina; }
- void Ispisi() const override {
- std::cout<<"Kvadar strnaica: "<<a<<" "<<b<<" "<<c<<" i zapremine: "<<this->DajZapreminu();
- }
- };
- class Lopta : public Lik
- {
- double poluprecnik;
- public:
- Lopta(double poluprecnik, double spec_tez) : poluprecnik(poluprecnik), Lik(spec_tez){}
- Lik *DajKopiju() const override { return new Lopta(*this); }
- double DajZapreminu() const override { return (4*poluprecnik*poluprecnik*poluprecnik*4*std::atan(1.))/3; }
- double DjaTezinu() const { return this->DajZapreminu()*specificna_tezina; }
- void Ispisi() const override
- {
- std::cout<<"Lopta poluprecnika: "<<poluprecnik<<" i zapremine: "<<this->DajZapreminu();
- }
- };
- class Valjak : public Lik
- {
- double poluprecnik_baze;
- double visina;
- public:
- Valjak(double poluprecnik_baze, double visina, double spec_tez) : poluprecnik_baze(poluprecnik_baze), visina(visina), Lik(spec_tez) {}
- Lik *DajKopiju() const override { return new Valjak(*this); }
- double DajZapreminu() const override { return visina*poluprecnik_baze*poluprecnik_baze*4*std::atan(1.); }
- double DajTezinu() const { return this->DajZapreminu()*specificna_tezina; }
- void Ispisi() const
- {
- std::cout<<"Valjak poluprecnika "<<poluprecnik_baze<<" i visine: "<<visina<<" i zapremine: "<<this->DajZapreminu();
- }
- };
- class KolekcijaLikova {
- std::vector<std::shared_ptr<Lik>> likovi;
- public:
- explicit KolekcijaLikova() {}
- ~KolekcijaLikova() { likovi.clear(); }
- void DodajKvadar(double s1, double s2, double s3, double spec_tez)
- {
- likovi.push_back(std::make_shared<Kvadar>(s1,s2,s3,spec_tez));
- }
- void DodajLoptu(double r, double spec_tez)
- {
- likovi.push_back(std::make_shared<Lopta>(r, spec_tez));
- }
- void DodajValjak(double pol_baze, double h, double spec_tez)
- {
- likovi.push_back(std::make_shared<Valjak>(pol_baze, h,spec_tez));
- }
- int DajBrojObjekata() const
- {
- return likovi.size();
- }
- KolekcijaLikova(const KolekcijaLikova &k)
- {
- for(int i=0; i<k.DajBrojObjekata(); i++)
- likovi.push_back(std::make_shared<Lik>(*k.likovi[i]));
- }
- };
- int main()
- {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement