![]() |
![]() | #1 |
Младенец Join Date: 08 2007 Location: mariupol
Posts: 3
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Пожалуста помогите разобраться. Я только только начал изучать С++ и нас уже нагружают такими задачами. Я разобрался только с простейшими консольными приложениями в классах плохо разбираюсь, точнее ни как. Работаю в Visual C++ 6. Спасибо всем. Создать базовый класс Picture, который содержит информацию о примитиве векторной графики (координаты xl,yl, x2,y2 ограничивающего прямоугольника, в котором будет рисоваться фигура; функцию Scale(...), рисующую примитив). На основе базового класса создать классы Reet. Ell. Line, которые рисуют соответственно прямоугольник, эллипс и линию. В основной программе создать массив элементов и с помощью клавиатуры управлять масштабом изображения. Доступ ко всем полям класса организовать только через методы класса. |
![]() |
![]() | #2 |
Профессор Join Date: 07 2004 Location: Own world Age: 39
Posts: 3,656
Downloads: 22 Uploads: 0
Reputation: 228 | 4 | ![]() Code: class Picture { protected: int x1, y1, x2, y2; public: Picture(int a=0, int b=0, int c=200, int d=200) : x1(a), y1(b), x2(c), y2(d){} virtual void Draw(HDC) = 0; void SetBounds(int a, int b, int c, int d) {x1=a; y1=b; x2=c; y2=d;} void GetBounds(int& a, int& b, int& c, int& d) const {a=x1; b=y1; c=x2; d=y2;} virtual ~Picture() {} }; class Ellipse : public Picture { public: Ellipse(int a, int b, int c, int d) : Picture(a, b, c, d) {} void Draw(HDC hdc) {::Ellipse(hdc, a, b, c, d);} }; class Rect : public Picture { public: Rect(int a, int b, int c, int d) : Picture(a, b, c, d) {} void Draw(HDC hdc) {::Rectangle(hdc, x1, y1, x2, y2);} }; class Line : public Picture { public: Line(int a, int b, int c, int d) : Picture(a, b, c, d) {} void Draw(HDC hdc) {::MoveTo(hdc, x1, y1); ::LineTo(hdc, x2, y2);} }; class Engine { std::vector<Picture*> shapes; public: void ReDraw(HDC hdc) {std::for_each(shapes.begin(), shapes.end(), std::bind2nd(std::mem_fun(&Picture::Draw), hdc);} void AddShape(int a, int b, int c, int d) { switch(rand()%3) { case 0: shapes.push_back(new Ellipse(a, b, c, d)); break; case 1: shapes.push_back(new Rect(a, b, c, d)); break; case 2: shapes.push_back(new Line(a, b, c, d)); break; } } }; Last edited by AvDav; 10.08.2007 at 23:28. |
![]() |
![]() | #3 |
Грустно... Join Date: 08 2002 Location: Там, где всегда идут дожди Age: 38
Posts: 21,717
Downloads: 2 Uploads: 0
Reputation: 250 | 8 | ![]()
Ва Давид, какой позор... почему координаты протектед? Они должны быть приватными, а доступ к ним осуществлять через протектед мембер функшн. Кроме того, условие явно некорректно передано, так как суть задачи, судя по именам функций является маштабирование, чего не решено ![]() Зачем учиться, если нету возможности решить элементарную задачу? |
![]() |
![]() | #5 |
Младенец Join Date: 08 2007 Location: mariupol
Posts: 3
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Спасибо за помощь, попробую разобраться. А к тому, зачем учиться если не получаются простые задачи объясню: Учусь заочно в филиале ХНУРЭ, по програмированию (как и по другим предметам) одна лекция 45 мин. за пол-года, преподы приезжают в наш город только на сессию, спросить не у кого, книг прикупил, а толку? учусь благодаря таким как вы , спрашиваю, а потом разбираюсь тогда хоть что-то ясно становится. Еще раз спасибо. Посоветуйте пожалуйста толковую книгу для совершенно самостоятельного изучения С++. Last edited by valmer; 17.08.2007 at 22:09. |
![]() |
![]() | #6 |
Какое небо, *, Багдад! Join Date: 10 2005 Location: Ереван
Posts: 1,682
Downloads: 16 Uploads: 0
Reputation: 99 | 4 | ![]() |
![]() |
![]() | #7 |
Профессор Join Date: 07 2004 Location: Own world Age: 39
Posts: 3,656
Downloads: 22 Uploads: 0
Reputation: 228 | 4 | ![]()
Эффективное программирование на С++, Эндрю Кениг и Барбара Му. Язык программирования С++, Бьерн Страуструп. www.rsdn.ru |
![]() |