У
Luxian была правильно спроектированы классовые отношения. Класс Point умел сам себя отображать, потому ему не нужно было обеспечивать доступ к своим данным. Недостаток программы
Luxian'а был в том, что программа была не дописана и, как следствие, не работала.
MiReQ исправил программу и довёл её до рабочего состояния. Это хорошее умение для программиста. Однако на этом вынужден остановить поток похвал в адрес
MiReQ'а: хотя его программа работает, тем не менее ставлю ему 2 за архитектуру приложения. То, что ты использовал protected область видимости - это, на самом деле, мелочь. Protected там действительно не нужен, но он и не нарушает идеологию отношений классов. Это всего лишь мелкое излишество, которое никому не мешает. Самое же большое зло в этом коде - это надпись friend. Квалификатор friend полностью нарушает принципы сокрытия данных. Это огромный минус для архитектуры.
Вот каким образом должен примерно выглядеть код.
Код: Выделить всё
#include "graphics.h"
#include "iostream.h"
#include "conio.h"
//---------------------------------------------------------------------------
class Point
{
public:
Point(int x, int y) :
m_x(x), m_y(y)
{}
void Show()
{
putpixel(m_x, m_y, 15);
}
void MoveTo()
{
moveto(m_x, m_y);
}
void LineTo()
{
lineto(m_x, m_y);
}
private:
int m_x;
int m_y;
};
class Line
{
public:
Line(const Point& p1, const Point& p2) :
m_p1(p1), m_p2(p2)
{}
void Show()
{
m_p1.MoveTo();
m_p2.LineTo();
}
private:
Point m_p1;
Point m_p2;
};
class Polygon
{
public:
Polygon(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) :
m_a1(Point(x1, y1), Point(x2, y2)),
m_a2(Point(x2, y2), Point(x3, y3)),
m_a3(Point(x3, y3), Point(x4, y4)),
m_a4(Point(x4, y4), Point(x1, y1))
{};
void Show()
{
m_a1.Show();
m_a2.Show();
m_a3.Show();
m_a4.Show();
};
private:
Line m_a1;
Line m_a2;
Line m_a3;
Line m_a4;
};
//---------------------------------------------------------------------------
int main()
{
int driver = 9; //VGA
int mode = 2; //640x480 16 colors
initgraph(&driver, &mode, "C:\\misc\\soft\\tc\\bgi\\\0");
Polygon p(0, 0, 10, 0, 10, 10, 0, 10);
p.Show();
getch();
closegraph();
return 0;
}