Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wzorce projektowe -most

Ostatnio zmodyfikowano 2017-05-08 18:23
Autor Wiadomość
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;
}
P-160047
wojownik266
» 2017-04-10 16:23:17
To bardzo fajny program... Tylko trochę nie rozumiem w czym problem?
P-160048
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
P-160072
darko202
» 2017-04-12 08:28:51
zacznij od zapoznania się z
http://cpp0x.pl/kursy/
masz tam opis bibliotek graficznych, oraz wzorców projektowych
i
http://www.bing.com/search​?q=wzorce+projektowe+most​&src=IE-SearchBox&FORM=IENTSR

a potem zadaj konkretne pytanie
P-160082
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;
}
P-160831
DejaVu
» 2017-05-08 17:53:46
Czyli do zamknięcia?
P-160850
Rashmistrz
» 2017-05-08 18:23:03
Czyli do zamknięcia?
» KursyWzorce projektowe kurs
U nas tego nie ma, więc nie wiem.
P-160851
« 1 »
  Strona 1 z 1