View Full Version : Пожалуйста помогите с заданием...
valmer
Aug 10, 2007, 21:56
Пожалуста помогите разобраться. Я только только начал изучать С++ и нас уже нагружают такими задачами. Я разобрался только с простейшими консольными приложениями в классах плохо разбираюсь, точнее ни как. Работаю в Visual C++ 6.
Спасибо всем.
Создать базовый класс Picture, который содержит информацию о примитиве векторной графики (координаты xl,yl, x2,y2 ограничивающего прямоугольника, в котором будет рисоваться фигура; функцию Scale(...), рисующую примитив). На основе базового класса создать классы Reet. Ell. Line, которые рисуют соответственно прямоугольник, эллипс и линию. В основной программе создать массив элементов и с помощью клавиатуры управлять масштабом изображения. Доступ ко всем полям класса организовать только через методы класса.
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;
}
}
};
Вобщем тут естественно не вся реализация, я попробовал в общих чертах описать механизм, думаю полезнее будет почитать о программировании в среде виндовс и С++ чтоб суметь окончательно справиться с задачей, а так по ходу дела будут конкретные вопросы - можно уже задавать на форуме.
Agregat
Aug 11, 2007, 07:04
Ва Давид, какой позор... почему координаты протектед? Они должны быть приватными, а доступ к ним осуществлять через протектед мембер функшн.
Кроме того, условие явно некорректно передано, так как суть задачи, судя по именам функций является маштабирование, чего не решено :)
Зачем учиться, если нету возможности решить элементарную задачу?
Мог бы еще к ГДИ придраться, типа откуда знаем что не на консоли рисуем :)
valmer
Aug 17, 2007, 21:59
Спасибо за помощь, попробую разобраться.
А к тому, зачем учиться если не получаются простые задачи объясню: Учусь заочно в филиале ХНУРЭ, по програмированию (как и по другим предметам) одна лекция 45 мин. за пол-года, преподы приезжают в наш город только на сессию, спросить не у кого, книг прикупил, а толку? учусь благодаря таким как вы , спрашиваю, а потом разбираюсь тогда хоть что-то ясно становится. Еще раз спасибо.
Посоветуйте пожалуйста толковую книгу для совершенно самостоятельного изучения С++.
knightmare
Aug 17, 2007, 22:34
Посоветуйте пожалуйста толковую книгу для совершенно самостоятельного изучения С++.Страуструп, "Язык программирования C++", из первых рук, так сказать.
Эффективное программирование на С++, Эндрю Кениг и Барбара Му.
Язык программирования С++, Бьерн Страуструп.
www.rsdn.ru
valmer
Aug 19, 2007, 05:17
Спасибо огромное, буду искать.
vBulletin® v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.