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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.96
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,648
Записей в блоге: 6
#1

Иерархия геометрических объектов: клас точка->класс квадрат->класс прямоугольник - C++

18.06.2011, 12:16. Просмотров 3951. Ответов 13
Метки нет (Все метки)

Иерархия геометрических объектов: класс точка->класс квадрат->класс прямоугольник.
Построить эту иерархию наследованием.. Прошу помочь - возможно это кем то уже делалось, не прошу писать с нуля - просто если кто то подобное встречал кинуть ссылку/код
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2011, 12:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Иерархия геометрических объектов: клас точка->класс квадрат->класс прямоугольник (C++):

Иерархия геометрических объектов - C++
Иерархия геометрических объектов наследием: класс точка -> класс треугольник -> класс квадрат -> класс прямоугольник. на си++ и mfc ,...

Наследование: базовый класс Квадрат, производный класс Пирамида - C++
Помогите, пожалуйста!:cry: Добавлено через 6 минут Создать класс КВАДРАТ, член класса- длинна стороны. Предусмотреть в классе методы...

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

Написать класс прямоугольник и построить прямоугольник, пересечением двух других - C++
Помогите пожалуйста с задание до делать, нужно построить треугольник являющегося общей частью (пересечением) двух прямоугольников. У меня...

Класс двумерная точка и класс многоугольник - C++
Всем привет Ну с двумерной точкой всё более- менее ясно. Вот набросок class DOT2 { int x, y; public: DOT2* next;

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { friend class diagonal; ...

13
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.06.2011, 12:32 #2
надо наследовать квадрат от прямоугольника, а не наоборот
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
18.06.2011, 12:39 #3
ну вот я недавно кому то писал тут конус унаследованный от круга, могу ссылку поискать. Но я не представляю как можно квадрат унаследовать от точки

Добавлено через 4 минуты
Массивы объектов. Наследование
вот тут где-то проект для VS валяется в приложениях
1
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.06.2011, 12:41 #4
pito211, легко. Наследуемая точка - это левая верхняя точка квадрата, а вторую (правую нижнюю) делаешь полем класса
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
18.06.2011, 12:59 #5
Нельзя из точки порождать прямоугольник. Это некорректно, поскольку прямоугольник не является точкой. Прямоугольник может содержать точки. Отношение включения (has).

Ну и как бы такие задания очень просты, их проще заново написать, чем искать где-то какой-то код.

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
#include <cmath>
#include <iostream>
#include <iomanip>
 
class Point {
 public:
  Point() : x_(0.0), y_(0.0) {}
  Point(float x, float y) : x_(x), y_(y) {}
  void setX(float new_value) { x_ = new_value; }
  void setY(float new_value) { y_ = new_value; }
  const float getX() const { return x_; }
  const float getY() const { return y_; }
  friend std::ostream &operator<<(std::ostream &stream, const Point &point) {
    return stream << std::fixed << std::setprecision(2)
      << "(" << point.getX() << ", " << point.getY() << ")";
  }
 private:
  float x_;
  float y_;
};
 
class Rectangle {
 public:
  Rectangle() : a_(), b_() {}
  Rectangle(const Point &a, const Point &b) : a_(a), b_(b) {}
  const Point &getA() const { return a_; }
  const Point &getB() const { return b_; }
  virtual void setA(const Point &new_value) { a_ = new_value; }
  virtual void setB(const Point &new_value) { a_ = new_value; }
  float getSideA() {
    return std::fabs(getA().getX() - getB().getX());
  }
  float getSideB() {
    return std::fabs(getA().getY() - getB().getY());
  }
  virtual float Perimeter() {
    return (getSideA() + getSideB()) * 2.0;
  }
  virtual float Area() {
    return getSideA() * getSideB();
  }
  friend std::ostream &operator<<(std::ostream &stream,
    const Rectangle &rectangle) {
    return stream
      << rectangle.getA() << " - " << rectangle.getB();
  }
 private:
  Point a_;
  Point b_;
};
 
class Square: public Rectangle {
 public:
  Square() : Rectangle() {}
  Square(const Point &a, float side)
    : Rectangle(a, Point(a.getX() + side, a.getY() + side)) {}
  float getSide() { return std::fabs(getA().getX() - getB().getX()); }
  void setSide(float side) {
    setB(Point(getA().getX() + side, getA().getY() + side));
  }
  void setB(const Point &new_value) { /* should not be called */ }
};
 
int main(int argc, char **argv) {
  Square a(Point(0, 0), 3);
  std::cout << a << std::endl
    << "Area: " << a.Area() << ", perimeter: " << a.Perimeter() << std::endl;
  return 0;
}
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,648
Записей в блоге: 6
18.06.2011, 15:00  [ТС] #6
Спасибо всем, уверен еще не раз эта тема пригодится студентам!
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.06.2011, 15:31 #7
lemegeton, с точки зрения геометрии некорректно, а с точки зрения программирования - прокатит.
0
Deviaphan
18.06.2011, 16:02
  #8

Не по теме:

Цитата Сообщение от sandye51 Посмотреть сообщение
Наследуемая точка - это левая верхняя точка квадрата, а вторую (правую нижнюю) делаешь полем класса
ОМГ! Ну нельзя же ТАК коверкать язык! За такое стерилизовать нужно, что бы не портили программистский генофонд.

1
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.06.2011, 16:58 #9
Цитата Сообщение от sandye51 Посмотреть сообщение
надо наследовать квадрат от прямоугольника, а не наоборот
По-хорошему ни квадрат не наследуется от прямоугольника , ни прямоугольник не наследуется от квадрата. Это две разные фигуры.
Их надо наследовать от абстрактного класса.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.06.2011, 17:08 #10
Цитата Сообщение от PointsEqual Посмотреть сообщение
Это две разные фигуры.
Квадрат - частный случай прямоугольника. Так что вполне можно и унаследовать.
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.06.2011, 17:20 #11
http://www.objectmentor.com/resources/articles/lsp.pdf

Добавлено через 1 минуту
вроде на собеседовании такая задача есть - что от чего наследуется.
Кто говорит то от этого или это от того - тот не проходит)
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.06.2011, 17:24 #12
Тогда не наследовать.)
0
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 218
Завершенные тесты: 1
17.12.2013, 02:07 #13
Я тоже начинаю осваивать C#. И у меня подобное задание. Я не все понял в примере на С++, поэтому попытался сделать сам.
Задание у меня такое: Определите систему классов: "Точка", "Прямоугольник", "Эллипс", связанных отношением наследованием. Определите в этих классах методы, которые перемещают фигуру по плоскости, возвращают ее площадь, периметр, отношение площади к периметру и строку символов, отражающую имя класса и состояния объекта.
class Point:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Point
    {
        public int x;
        public int y;    // координаты точки
 
        public Point()
        {
            Console.WriteLine("--- создание Точки: ");
            Console.Write("  введите координату X: ");
            x = Convert.ToInt32(Console.ReadLine());
            Console.Write("  введите координату Y: ");
            y = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine();
        }
 
        public virtual void Print(Point p)
        {   // вывод на печать характеристик точки
            Console.WriteLine("---- Точка: ");
            Console.WriteLine(" X= {0}, Y= {1}", p.x, p.y);
            Console.WriteLine();
        }
    }

class Rectangle : Point
Кликните здесь для просмотра всего текста
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
class Rectangle : Point
    {
 
        protected Point left;  // координаты верхнего левого угла прямоугольника
        //protected Point rigth; // координаты нижнего правого угла прямоугольника
        public int w, h;    // ширина и высота прямоугольника
 
        public Rectangle()
        {
            left.x = this.x;
            left.y = this.y;
        }
 
        public void PrintRectangle()
        {   
            // вывод на печать характеристик прямоугольника
            Console.WriteLine("---- Прямоугольник --");
            Console.WriteLine(" верхний левый угол: ");
            Print(left);
            Console.WriteLine(" Ширина= {0}, Высота= {1}", w, h);
            Console.WriteLine();
            Console.ReadLine();
        }
    }

Естественно у меня получается ошибка на left.x = this.x;. Я пытаюсь класс Точки привязать к двум точкам класса Прямоугольник (левый верхний угол и правый нижний угол) и все никак не получается.

Добавлено через 29 минут
Нашел интересную ссылку по этому вопросу.
0
gray_fox
17.12.2013, 04:31     Иерархия геометрических объектов: клас точка->класс квадрат->класс прямоугольник
  #14

Не по теме:

Цитата Сообщение от Worldmen Посмотреть сообщение
Определите систему классов: "Точка", "Прямоугольник", "Эллипс", связанных отношением наследованием.
Код
interface Figure { /* ... */ }

class Point     : Figure { /* ... */ }
class Rectangle : Figure { /* ... */ }
class Ellipsis  : Figure { /* ... */ }

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2013, 04:31
Привет! Вот еще темы с ответами:

Класс «Квадрат»: можно ли вписать в объект-квадрат со стороной A окружность радиуса R - C++
Люди помогите, сижу уже неделю, выходит какая-то фигня. Хочу научиться, но тяжеловато) Объясните кто может, как будет выглядеть код? ...

Иерархия классов и указатель на базовый класс - C++
Существует три класса, один наследуется от другого: class Base { public: virtual int WhoAmI const { return 0; }

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

Описать абстрактный класс для хранения информации геометрических фигурах. - C++
Описать абстрактный класс для хранения информации геометрических фигурах.Использовать его тестовой программе. я попробовал описать с...


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

Или воспользуйтесь поиском по форуму:
14
17.12.2013, 04:31
Ответ Создать тему
Опции темы

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