Форум программистов, компьютерный форум CyberForum.ru

Практическая работа по классам - C++

Восстановить пароль Регистрация
 
natasha)))
Сообщений: n/a
17.01.2012, 22:47     Практическая работа по классам #1
Построить систему классов для описания плоских геометрических фигур: круг, квадрат, треугольник. Предусмотреть методы для создания объектов, перемещение на плоскости, изменения размеров и вращения на заданный угол.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2012, 22:47     Практическая работа по классам
Посмотрите здесь:

C++ Вопрос по классам
учебник по классам C++
C++ Вопрос по классам
Лабораторные по классам C++
C++ Научно-практическая конференция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.01.2012, 22:51     Практическая работа по классам #2
самостоятельно пробовали? что не получается?
natasha)))
Сообщений: n/a
17.01.2012, 22:52     Практическая работа по классам #3
побывала
только ничего не получается
плохо поняла эту тему
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.01.2012, 23:04     Практическая работа по классам #4
нужно создать абстрактный класс - базовый для всех фигур, объявить в нем ф-ии (чисто виртуальные), которые будут унаследованы и определены в производных классах - фигурах

Добавлено через 6 минут
что из этого не получается?
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
18.01.2012, 15:19     Практическая работа по классам #5
Давайте помогу с парой классов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
 
// pure virtual
class Figure {
 public:
  virtual ~Figure() {
    std::cout << "Deleting figure." << std::endl;
  }
  virtual void rotate(float angle) = 0;
  virtual void shift(float x, float y) = 0;
  virtual void scale(float n) = 0;
  virtual std::string toString() = 0;
};
 
struct Point {
  float x, y;
  Point() : x(0.), y(0.) {}
  Point(float x_, float y_) : x(x_), y(y_) {}
  std::string toString() {
    std::stringstream result;
    result << "[" << x << ", " << y << "]";
    return result.str();
  }
};
 
// circle
class Circle : public Figure {
 public:
  Circle() : center_(), radius_(0.) {}
  Circle(const Point &center, float radius)
    : center_(center), radius_(radius) {}
  const Point &getCenter() const { return center_; }
  float getRadius() const { return radius_; }
  virtual void rotate(float angle) {
    // вращать круг как-то не имеет смысла
  }
  virtual void shift(float x, float y) {
    center_.x += x;
    center_.y += y;
  }
  virtual void scale(float n) {
    radius_ *= n;
  }
  virtual std::string toString() {
    std::stringstream result;;
    result << "Circle: center: " << center_.toString() << ", radius " <<
      radius_;
    return result.str();
  }
 private:
  Point center_;
  float radius_;
};
 
class Triangle : public Figure {
 public:
  Triangle() : a_(), b_(), c_() {}
  Triangle(const Point &a, const Point &b, const Point &c)
    : a_(a), b_(b), c_(c) {}
  const Point &getPointA() const { return a_; }
  const Point &getPointB() const { return b_; }
  const Point &getPointC() const { return c_; }
  virtual void rotate(float angle) {
    // надо вычислять центр, пересчитывать координаты точек
    // лень
  }
  virtual void shift(float x, float y) {
    a_.x += x;
    a_.y += y;
    b_.x += x;
    b_.y += y;
    c_.x += x;
    c_.y += y;
  }
  virtual void scale(float n) {
    // надо вычислять центр, пересчитывать координаты точек
    // лень
  }
  virtual std::string toString() {
    std::stringstream result;;
    result << "Triangle: a: " << a_.toString() <<
      ", b: " << b_.toString() << ", c: " << c_.toString();
    return result.str();
  }
 private:
  Point a_, b_, c_;
};
 
// класс для создания фигур
class FigureFactory {
 public:
  FigureFactory() : figures_() {}
  // созданные фигуры удалятся при удалении класса
  virtual ~FigureFactory() {
    for (std::vector<Figure*>::iterator i = figures_.begin();
      i != figures_.end(); ++i)
      delete *i;
  }
  Circle *createCircle(const Point &point, float radius) {
    Circle *figure = new Circle(point, radius);
    figures_.push_back(figure);
    return figure;
  }
  Triangle *createTriangle(const Point &a, const Point &b, const Point &c) {
    Triangle *figure = new Triangle(a, b, c);
    figures_.push_back(figure);
    return figure;
  }
 private:
  std::vector<Figure*> figures_;
};
 
int main(int argc, char *argv[]) {
  FigureFactory factory;
  Figure *circle = factory.createCircle(Point(0, 0), 10);
  std::cout << circle->toString() << std::endl;
  Figure *triangle = factory.createTriangle(Point(0, 0), Point(0, 1), Point(1, 0));
  std::cout << triangle->toString() << std::endl;
  return 0;
}
Yandex
Объявления
18.01.2012, 15:19     Практическая работа по классам
Ответ Создать тему
Опции темы

Текущее время: 23:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru