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

Класс Point и Rectangle - C++

Восстановить пароль Регистрация
 
ГеннадийВ
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 34
27.10.2013, 16:51     Класс Point и Rectangle #1
*.h :
class Point
{
public:
Point(int m_x1, int m_y1);
~Point();
void InputPoint(int m_x1, int m_y1);

private:
int m_x;
int m_y;
};

class Rectangle
{
public:
Rectangle(Point m_a1, Point m_b1, Point m_c1, Point m_d1);
~Rectangle();
void InputRec(Point m_a1, Point m_b1, Point m_c1, Point m_d1);

private:
Point m_a;
Point m_b;
Point m_c;
Point m_d;
};

*.cpp
Point::Point(int m_x1, int m_y1)
{
m_x = m_x1;
m_y = m_y1;
}

Point::~Point()
{
m_x = 0;
m_y = 0;
}

void Point::InputPoint(int m_x1, int m_y1)
{
m_x = m_x1;
m_y = m_y1;
}
Rectangle::Rectangle(Point m_a1, Point m_b1, Point m_c1, Point m_d1)
{
m_a.Point(m_a1.m_x, m_a1.m_y);
m_b.Point(m_b1.m_x, m_b1.m_y);
m_c.Point(m_c1.m_x, m_c1.m_y);
m_d.Point(m_d1.m_x, m_d1.m_y);
}

Rectangle::~Rectangle()
{
m_a.~Point();
m_b.~Point();
m_c.~Point();
m_d.~Point();
}

void Rectangle::InputRec(Point m_a1, Point m_b1, Point m_c1, Point m_d1)
{
m_a1.InputPoint(m_a1.m_x, m_a1.m_y);
m_b1.InputPoint(m_b1.m_x, m_b1.m_y);
m_c1.InputPoint(m_c1.m_x, m_c1.m_y);
m_d1.InputPoint(m_d1.m_x, m_d1.m_y);
}
Подскажите, что в этом коде не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 16:53     Класс Point и Rectangle #2
Что это за набор символов?
ГеннадийВ
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 34
27.10.2013, 16:58  [ТС]     Класс Point и Rectangle #3
тут так можно написать
class Point
{
public:
Point(int m_x1, int m_y1);
~Point();
void InputPoint(int m_x1, int m_y1);

private:
int m_x;
int m_y;
};

Point::Point(int m_x1, int m_y1)
{
m_x = m_x1;
m_y = m_y1;
}

Point::~Point()
{
m_x = 0;
m_y = 0;
}

void Point::InputPoint(int m_x1, int m_y1)
{
m_x = m_x1;
m_y = m_y1;
}
??
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
27.10.2013, 18:51     Класс Point и Rectangle #4
C++
1
2
3
4
class Rectangle : public Point
{
.............
}
ГеннадийВ
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 34
27.10.2013, 19:33  [ТС]     Класс Point и Rectangle #5
так я писал, ещё чего то не хватает или я не то пишу в конструкторе, ошибку выводит
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
27.10.2013, 19:50     Класс Point и Rectangle #6
Деструкторы вам тут тоже ни к чему -- динамически распределяемой памяти нет.
Про наследование вообще ересь та еще.
Не надо никого наследовать и пихать левые штуки. Можно все сделать очень консистентно с помощью фабричных методов.

Быдыщ:
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
#include <iostream>
#include <iomanip>
#include <list>
 
class Point {
 public:
  Point(double x, double y) : x(x), y(y) {}
  Point() : x(0), y(0) {}
  double getX() const { return x; }
  double getY() const { return y; }
 private:
  double x, y;
};
 
std::ostream &operator<<(std::ostream &stream, const Point &p) {
  return stream << "[" <<
    std::fixed << std::setprecision(2) << p.getX() << ", " <<
    std::fixed << std::setprecision(2) << p.getY() << "]";
}
 
class Figure {
 public:
  const std::list<Point> &getPoints() const {
    return points;
  }
  /**
   * Создает квадрат со сторонами, параллельными осям координат.
   * 
   * @param base левая верхняя точка квадрата
   * @param side длина стороны квадрата
   */
  static Figure createSquare(const Point &base, double side) {
    std::list<Point> points;
    points.push_back(base);
    points.push_back(Point(base.getX() + side, base.getY()));
    points.push_back(Point(base.getX() + side, base.getY() + side));
    points.push_back(Point(base.getX(),base.getY() + side));
    return Figure(points);
  }
 private:
  std::list<Point> points;
  Figure(std::list<Point> &points) {
    this->points = points;
  }
};
 
std::ostream &operator<<(std::ostream &stream, const Figure &p) {
  stream << "Figure{";
  std::list<Point>::const_iterator i = p.getPoints().begin();
  while(i != p.getPoints().end()) {
    stream << *i++;
    if (i != p.getPoints().end()) {
      stream << ", ";
    }
  }
  return stream << "}";
}
 
 
int main(int, char**) {
  Figure square = Figure::createSquare(Point(1, 1), 10);
 
  std::cout << square << std::endl;
 
  return 0;
}
Добавлено через 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
#include <cmath>
#include <iostream>
#include <iomanip>
#include <list>
 
class Point {
 public:
  Point(double x, double y) : x(x), y(y) {}
  Point() : x(0), y(0) {}
  double getX() const { return x; }
  double getY() const { return y; }
 private:
  double x, y;
};
 
std::ostream &operator<<(std::ostream &stream, const Point &p) {
  return stream << "[" <<
    std::fixed << std::setprecision(2) << p.getX() << ", " <<
    std::fixed << std::setprecision(2) << p.getY() << "]";
}
 
class Figure {
 public:
  const std::list<Point> &getPoints() const {
    return points;
  }
  /**
   * Создает квадрат со сторонами, параллельными осям координат.
   * 
   * @param base левая верхняя точка квадрата
   * @param side длина стороны квадрата
   */
  static Figure createSquare(const Point &base, double side) {
    std::list<Point> points;
    points.push_back(base);
    points.push_back(Point(base.getX() + side, base.getY()));
    points.push_back(Point(base.getX() + side, base.getY() + side));
    points.push_back(Point(base.getX(),base.getY() + side));
    return Figure(points);
  }
 
  /**
   * Создает прямоугольник со сторонами, параллельными осям координат.
   * 
   * @param base левая верхняя точка квадрата
   * @param sideX ширина прямоугольника
   * @param sideY высота прямоугольника
   */
  static Figure createRectangle(const Point &base, double sideX, 
    double sideY) {
    std::list<Point> points;
    points.push_back(base);
    points.push_back(Point(base.getX() + sideX, base.getY()));
    points.push_back(Point(base.getX() + sideX, base.getY() + sideY));
    points.push_back(Point(base.getX(),base.getY() + sideY));    
    return Figure(points);
  }
 private:
  std::list<Point> points;
  Figure(std::list<Point> &points) {
    this->points = points;
  }
};
 
std::ostream &operator<<(std::ostream &stream, const Figure &p) {
  stream << "Figure{";
  std::list<Point>::const_iterator i = p.getPoints().begin();
  while(i != p.getPoints().end()) {
    stream << *i++;
    if (i != p.getPoints().end()) {
      stream << ", ";
    }
  }
  return stream << "}";
}
 
 
int main(int, char**) {
  Figure square = Figure::createSquare(Point(0, 0), 8);
  Figure rectangle = Figure::createRectangle(Point(1, 1), 10, 15);
 
  std::cout << square << std::endl << rectangle << std::endl;
 
  return 0;
}
Преимущество подхода в том, что нельзя создать заведомо неконстистентный прямоугольник -- когда точки не образуют прямоугольник.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 19:50     Класс Point и Rectangle
Еще ссылки по теме:

C++ Создать класс Rectangle, который сохраняет Декартовы координаты четырех вершин прямоугольника
C++ Нужно удалить класс Rectangle1 дружественный к классу Rectangle
C++ Класс Point

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
henecs
 Аватар для henecs
16 / 16 / 0
Регистрация: 19.05.2013
Сообщений: 135
27.10.2013, 19:50     Класс Point и Rectangle #7
неужели так тяжело нормально оформить тему?
Yandex
Объявления
27.10.2013, 19:50     Класс Point и Rectangle
Ответ Создать тему
Опции темы

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