Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters > C/C++
Register

Reply
 
LinkBack Thread Tools
Old 10.08.2007, 22:56   #1
Младенец
 
Join Date: 08 2007
Location: mariupol
Posts: 3
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default Пожалуйста помогите с заданием...

Пожалуста помогите разобраться. Я только только начал изучать С++ и нас уже нагружают такими задачами. Я разобрался только с простейшими консольными приложениями в классах плохо разбираюсь, точнее ни как. Работаю в Visual C++ 6.
Спасибо всем.
Создать базовый класс Picture, который содержит информацию о примитиве векторной графики (координаты xl,yl, x2,y2 ограничивающего прямоугольника, в котором будет рисоваться фигура; функцию Scale(...), рисующую примитив). На основе базового класса создать классы Reet. Ell. Line, которые рисуют соответственно прямоугольник, эллипс и линию. В основной программе создать массив элементов и с помощью клавиатуры управлять масштабом изображения. Доступ ко всем полям класса организовать только через методы класса.
Reply With Quote
Old 11.08.2007, 00:18   #2
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Universe
Age: 36
Posts: 3,413
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

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; 11.08.2007 at 00:28.
Reply With Quote
Old 11.08.2007, 08:04   #3
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 8
Default

Ва Давид, какой позор... почему координаты протектед? Они должны быть приватными, а доступ к ним осуществлять через протектед мембер функшн.

Кроме того, условие явно некорректно передано, так как суть задачи, судя по именам функций является маштабирование, чего не решено

Зачем учиться, если нету возможности решить элементарную задачу?
Reply With Quote
Old 11.08.2007, 16:27   #4
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Universe
Age: 36
Posts: 3,413
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

Мог бы еще к ГДИ придраться, типа откуда знаем что не на консоли рисуем
Reply With Quote
Old 17.08.2007, 22:59   #5
Младенец
 
Join Date: 08 2007
Location: mariupol
Posts: 3
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Спасибо за помощь, попробую разобраться.
А к тому, зачем учиться если не получаются простые задачи объясню: Учусь заочно в филиале ХНУРЭ, по програмированию (как и по другим предметам) одна лекция 45 мин. за пол-года, преподы приезжают в наш город только на сессию, спросить не у кого, книг прикупил, а толку? учусь благодаря таким как вы , спрашиваю, а потом разбираюсь тогда хоть что-то ясно становится. Еще раз спасибо.
Посоветуйте пожалуйста толковую книгу для совершенно самостоятельного изучения С++.

Last edited by valmer; 17.08.2007 at 23:09.
Reply With Quote
Old 17.08.2007, 23:34   #6
Какое небо, *, Багдад!
 
knightmare's Avatar
 
Join Date: 10 2005
Location: Ереван
Posts: 1,682
Downloads: 16
Uploads: 0
Reputation: 99 | 3
Default

Quote:
Originally Posted by valmer View Post
Посоветуйте пожалуйста толковую книгу для совершенно самостоятельного изучения С++.
Страуструп, "Язык программирования C++", из первых рук, так сказать.
Reply With Quote
Old 17.08.2007, 23:40   #7
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Universe
Age: 36
Posts: 3,413
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

Эффективное программирование на С++, Эндрю Кениг и Барбара Му.
Язык программирования С++, Бьерн Страуструп.
www.rsdn.ru
Reply With Quote
Old 19.08.2007, 06:17   #8
Младенец
 
Join Date: 08 2007
Location: mariupol
Posts: 3
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Спасибо огромное, буду искать.
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 13:56.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.