Wzorce projektowe -most
Ostatnio zmodyfikowano 2017-05-08 18:23
damian00716 Temat założony przez niniejszego użytkownika |
Wzorce projektowe -most » 2017-04-10 15:28:29 Mamy napisać program, który będzie rysował prostokąty za pomocą dwóch różnych bibliotek graficznych, w momencie utworzenia konkretnego prostokąta jest wiadome, która biblioteka zostanie użyta do wizualizacji. #include <iostream>
using namespace std;
class Drawing { public: *Drawing(); drawLine(); drawCircle(); };
class Shape { Drawing* pd = nullptr; public: Shape(Drawing* p) : pd(p) {} *Shape(); draw(); drawLine(); drawCircle(); };
class DP1 { public: void draw_a_line(){ cout << "DP1: linia\n"; } void draw_a_circle(){ cout << "DP1: okrag\n"; } };
class DP2{ public: void drawline(){ cout << "DP2: linia\n"; } void drawcircle(){ cout << "DP2: okrag\n"; } };
//napisac klasy: Shape, Drawing a potem Rectangle, Circle oraz V1Drawing, V2Drawing class V1Drawing : public Drawing { public: drawLine() { cout<<"V1Drawing: linia\n"; } drawCircle() { cout<<"V1Drawing: kolo\n"; } }; class V2Drawing : public Drawing { public: drawLine() { cout<<"V1Drawing: linia\n"; } drawCircle() { cout<<"V1Drawing: kolo\n"; } };
// Abstrakcja
class Circle : public Shape { public: draw() { cout<<"Draw: kolo\n"; } };
class Rectangle : public Shape { public: draw() { cout<<"Draw: linia\n"; } };
//#################
int main(){ DP1 biblioteka1; //objekt bibl 1 DP2 biblioteka2; //objekt bibl 2 Drawing* pd1 = new V1Drawing( biblioteka1 ); Drawing* pd2 = new V2Drawing( biblioteka2 ); Shape* ptr1 = new Rectangle(pd1); Shape* ptr2 = new Circle(pd2); ptr1->draw(); // rysuje prostokat za pomoca v1 ptr2->draw(); // rysuje okrag za pomoca v2 ptr1->setLib(pd2); // zmiana biblioteki rysujacej na v2 ptr2->setLib(pd1); // zmiana biblioteki rysujacej na v1 ptr1->draw(); // rysuje prostokat za pomoca v2 ptr2->draw(); // rysuje okrag za pomoca v1
delete pd1; delete pd2; delete ptr1; delete ptr2; }
|
|
wojownik266 |
» 2017-04-10 16:23:17 To bardzo fajny program... Tylko trochę nie rozumiem w czym problem? |
|
damian00716 Temat założony przez niniejszego użytkownika |
» 2017-04-11 18:35:03 z dokończeniem tego, wykładowca wrzucił nas na głęboką wodę i nie wiem co dalej |
|
darko202 |
» 2017-04-12 08:28:51 |
|
damian00716 Temat założony przez niniejszego użytkownika |
» 2017-05-07 23:35:18 ostatecznie wyszło mi coś takiego #include <iostream>
using namespace std;
class DP1{ public: void draw_a_line(){ cout << "DP1: linia\n"; } void draw_a_circle() { cout << "DP1: okrag\n"; } };
class DP2{ public: void drawline() { cout << "DP2: linia\n"; } void drawcircle() { cout << "DP2: okrag\n"; } };
class Drawing{ public: virtual void drawLine() = 0; virtual void drawCircle() = 0; };
//napisac klasy: Shape, Drawing a potem Rectangle, Circle oraz V1Drawing, V2Drawing
class V1Drawing : public Drawing{ public: DP1 lib; virtual void drawLine() { cout << "V1Drawing: linia\n"; lib.draw_a_line(); } virtual void drawCircle() { cout << "V1Drawing: kolo\n"; lib.draw_a_circle(); } };
class V2Drawing : public Drawing{ public: DP2 lib; virtual void drawLine() { cout << "V2Drawing: linia\n"; lib.drawline(); } virtual void drawCircle() { cout << "V2Drawing: kolo\n"; lib.drawcircle(); } };
// Abstrakcja
class Shape{ public: Drawing* drawing; Shape(Drawing* ptr = nullptr) : drawing(ptr) { } virtual void draw() = 0; };
class Circle : public Shape{ double radius; public: Circle(Drawing* ptr = nullptr, double r = 1.0) : Shape(ptr), radius(r) { } virtual void draw() { if (drawing == nullptr) return; drawing->drawCircle(); cout << "kolo o promieniu " << radius; } };
class Rectangle : public Shape{ double a; double b; public: Rectangle(Drawing* ptr = nullptr, double aa = 1, double bb = 1) : Shape(ptr), a(aa), b(bb) { } virtual void draw() { if (drawing == nullptr) return; drawing->drawLine(); cout << "prostokat o bokach " << a << " i " << b; } };
int main() { V1Drawing v1; V2Drawing v2;
Circle c1(&v1); Rectangle r1(&v1); Circle c2(&v2); Rectangle r2(&v2);
Shape* ptc[] { &c1, &c2, &r1, &r2 }; for (auto& x: ptc) { x->draw(); cout << endl;
}
return 0; }
|
|
DejaVu |
» 2017-05-08 17:53:46 Czyli do zamknięcia? |
|
Rashmistrz |
» 2017-05-08 18:23:03 |
|
« 1 » |