fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <string>
  5.  
  6. class Punkt{
  7. public:
  8. Punkt(float x, float y) : x(x), y(y) { }
  9. float zwrocX(){ return this->x; }
  10. float zwrocY(){ return this->y; }
  11. private:
  12. float x;
  13. float y;
  14. };
  15.  
  16. class Odcinek{
  17. public:
  18. Odcinek(const Punkt& p1, const Punkt& p2) : p1(p1), p2(p2) {}
  19. Punkt zwrocP1(){ return this->p1; }
  20. Punkt zwrocP2(){ return this->p2; }
  21. private:
  22. Punkt p1;
  23. Punkt p2;
  24. };
  25.  
  26. class Figura{
  27. public:
  28. void wypiszKrawedzie(){
  29. std::cout << "Wspolrzedne krawedzi figury: " << this->nazwa << "\n";
  30. for(unsigned i=0;i<this->odcinki.size();i++)
  31. std::cout << "K[" << i + 1 << "] = (" << this->odcinki[i].zwrocP1().zwrocX() <<
  32. ", " << this->odcinki[i].zwrocP1().zwrocY() << "), (" << this->odcinki[i].zwrocP2().zwrocX() <<
  33. ", " << this->odcinki[i].zwrocP2().zwrocY() << ")\n";
  34. }
  35.  
  36. protected:
  37. std::vector<Odcinek> odcinki;
  38. std::string nazwa;
  39. };
  40.  
  41. class Trojkat : public Figura{
  42. public:
  43. Trojkat(const Odcinek& a, const Odcinek& b, const Odcinek& c, std::string nazwa){
  44. this->odcinki.push_back(a);
  45. this->odcinki.push_back(b);
  46. this->odcinki.push_back(c);
  47. this->nazwa = nazwa;
  48. }
  49. };
  50.  
  51. class Kwadrat : public Figura{
  52. public:
  53. Kwadrat(const Odcinek& a, const Odcinek& b, const Odcinek& c, const Odcinek& d, std::string nazwa){
  54. this->odcinki.push_back(a);
  55. this->odcinki.push_back(b);
  56. this->odcinki.push_back(c);
  57. this->odcinki.push_back(d);
  58. this->nazwa = nazwa;
  59. }
  60. };
  61.  
  62. template<class T> class Lista{
  63. public:
  64. void dodaj(const T &figura){ this->listaFigur.push_back(figura); }
  65. void wypisz(){
  66. typename std::list<T>::iterator it;
  67. for(it=this->listaFigur.begin();it!=this->listaFigur.end();++it){
  68. std::cout << std::endl;
  69. (*it)->wypiszKrawedzie();
  70. }
  71. }
  72.  
  73. private:
  74. std::list<T> listaFigur;
  75. };
  76.  
  77. int main(){
  78.  
  79. Trojkat *trk = new Trojkat(
  80. Odcinek(Punkt(0,0), Punkt(0,2)),
  81. Odcinek(Punkt(0,2), Punkt(2,0)),
  82. Odcinek(Punkt(2,0), Punkt(0,0)),
  83. "Trojkat");
  84.  
  85. Kwadrat *kwd = new Kwadrat(
  86. Odcinek(Punkt(0,0), Punkt(0,2)),
  87. Odcinek(Punkt(0,2), Punkt(2,2)),
  88. Odcinek(Punkt(2,2), Punkt(2,0)),
  89. Odcinek(Punkt(2,0), Punkt(0,0)),
  90. "Kwadrat");
  91.  
  92. Lista<Figura*> lst;
  93. lst.dodaj(trk);
  94. lst.dodaj(kwd);
  95. lst.wypisz();
  96.  
  97. delete trk;
  98. delete kwd;
  99. return 0;
  100. }
  101.  
Success #stdin #stdout 0s 3232KB
stdin
Standard input is empty
stdout
Wspolrzedne krawedzi figury: Trojkat
K[1] = (0, 0), (0, 2)
K[2] = (0, 2), (2, 0)
K[3] = (2, 0), (0, 0)

Wspolrzedne krawedzi figury: Kwadrat
K[1] = (0, 0), (0, 2)
K[2] = (0, 2), (2, 2)
K[3] = (2, 2), (2, 0)
K[4] = (2, 0), (0, 0)