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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ГеннадийВ
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 34
#1

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

27.10.2013, 16:51. Просмотров 733. Ответов 6
Метки нет (Все метки)

*.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);
}
Подскажите, что в этом коде не так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2013, 16:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс Point и Rectangle (C++):

Класс Rectangle совпадает с функцией Rectangle - C++
Пишу свой класс Rectangle, который при отрисовки использует функцию Rectangle из GDI. Возникает ошибка из-за того, что имена одинаковые. Но...

Составить класс Rectangle - C++
Здравствуйте. Я хочу попросить чтобы вы составили класс с прототипами функций (код функций хочу написать сам), и оставили комментарии к...

Класс Rectangle (прямоугольник) - C++
друзья , у меня экзамен . а я не бум бум в c++ . помогите кто сможет Создать класс Rectangle (прямоугольник). Класс имеет атрибуты...

Создать класс Rectangle - C++
Создать класс Rectangle, разработав следующие элементы класса: а. Поля: int a, b; б. Конструктор, позволяющий создать...

Класс Rectangle графика - C++
Добрый вечер, с графикой в С++ ни разу не работал, поэтому прошу писать как можно понятнее Создал класс Rectangle: #include...

Реализовать класс Rectangle - C++
Реализовать класс Rectangle. Класс должен хранить координаты, а так же длину и ширину прямоугольника. Предусмотреть инициализацию данного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 16:53 #2
Что это за набор символов?
0
ГеннадийВ
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 34
27.10.2013, 16:58  [ТС] #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;
}
??
0
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
27.10.2013, 18:51 #4
C++
1
2
3
4
class Rectangle : public Point
{
.............
}
0
ГеннадийВ
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 34
27.10.2013, 19:33  [ТС] #5
так я писал, ещё чего то не хватает или я не то пишу в конструкторе, ошибку выводит
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
27.10.2013, 19:50 #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;
}
Преимущество подхода в том, что нельзя создать заведомо неконстистентный прямоугольник -- когда точки не образуют прямоугольник.
1
henecs
17 / 17 / 0
Регистрация: 19.05.2013
Сообщений: 135
27.10.2013, 19:50 #7
неужели так тяжело нормально оформить тему?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 19:50
Привет! Вот еще темы с ответами:

Создать класс Point и производный класс ColoredPoint (цветная точка) - C++
Создайте класс Point (точка на плоскости), характеризующийся двумя координатами. Создайте производный класс ColoredPoint (цветная точка), в...

Создать класс Point и класс-наследник Line - C++
Создайте класс Point (точка), который содержит элементы целого типа xCoordinate и yCoordinate, и класс наследник Line, имеющий функции...

Нужно удалить класс Rectangle1 дружественный к классу Rectangle - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; struct Coords{ float x; float y; }; class...

Создать класс Rectangle, разработав следующие элементы класса - C++
Создать класс Rectangle, разработав следующие элементы класса: a) Поля: int a, b; b) Конструктор, позволяющий создать экземпляр класса...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.10.2013, 19:50
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru