Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/46: Рейтинг темы: голосов - 46, средняя оценка - 4.54
заставил Бендера
 Аватар для IIIa66uMEM6eP
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6

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

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

Студворк — интернет-сервис помощи студентам
Иерархия геометрических объектов: класс точка->класс квадрат->класс прямоугольник.
Построить эту иерархию наследованием.. Прошу помочь - возможно это кем то уже делалось, не прошу писать с нуля - просто если кто то подобное встречал кинуть ссылку/код
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2011, 12:16
Ответы с готовыми решениями:

Создать базовый класс прямоугольник и класс-наследник квадрат
Создать базовый класс прямоугольник со свойствами ширина, длина, конструктором с параметрами и методом (метод должен быть виртуальный),...

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

Иерархия классов для представления геометрических фигур: прямая, ломанная, прямоугольник, эллипс, многоугольни
Здравствуйте, помогите пожалуйста с лабораторной. Задание: Разработать иерархию классов для представления геометрических фигур:...

13
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
18.06.2011, 12:32
надо наследовать квадрат от прямоугольника, а не наоборот
0
 Аватар для pito211
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
18.06.2011, 12:39
ну вот я недавно кому то писал тут конус унаследованный от круга, могу ссылку поискать. Но я не представляю как можно квадрат унаследовать от точки

Добавлено через 4 минуты
Массивы объектов. Наследование
вот тут где-то проект для VS валяется в приложениях
1
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
18.06.2011, 12:41
pito211, легко. Наследуемая точка - это левая верхняя точка квадрата, а вторую (правую нижнюю) делаешь полем класса
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
18.06.2011, 12:59
Нельзя из точки порождать прямоугольник. Это некорректно, поскольку прямоугольник не является точкой. Прямоугольник может содержать точки. Отношение включения (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
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6
18.06.2011, 15:00  [ТС]
Спасибо всем, уверен еще не раз эта тема пригодится студентам!
0
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
18.06.2011, 15:31
lemegeton, с точки зрения геометрии некорректно, а с точки зрения программирования - прокатит.
0
18.06.2011, 16:02

Не по теме:

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

1
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
18.06.2011, 16:58
Цитата Сообщение от sandye51 Посмотреть сообщение
надо наследовать квадрат от прямоугольника, а не наоборот
По-хорошему ни квадрат не наследуется от прямоугольника , ни прямоугольник не наследуется от квадрата. Это две разные фигуры.
Их надо наследовать от абстрактного класса.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.06.2011, 17:08
Цитата Сообщение от PointsEqual Посмотреть сообщение
Это две разные фигуры.
Квадрат - частный случай прямоугольника. Так что вполне можно и унаследовать.
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
18.06.2011, 17:20
http://www.objectmentor.com/re... es/lsp.pdf

Добавлено через 1 минуту
вроде на собеседовании такая задача есть - что от чего наследуется.
Кто говорит то от этого или это от того - тот не проходит)
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.06.2011, 17:24
Тогда не наследовать.)
0
 Аватар для Worldmen
5 / 8 / 4
Регистрация: 31.08.2013
Сообщений: 350
17.12.2013, 02:07
Я тоже начинаю осваивать 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
17.12.2013, 04:31

Не по теме:

Цитата Сообщение от Worldmen Посмотреть сообщение
Определите систему классов: "Точка", "Прямоугольник", "Эллипс", связанных отношением наследованием.
Code
1
2
3
4
5
interface Figure { /* ... */ }
 
class Point     : Figure { /* ... */ }
class Rectangle : Figure { /* ... */ }
class Ellipsis  : Figure { /* ... */ }

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2013, 04:31
Помогаю со студенческими работами здесь

Создать класс Рoint (Точка), а также классы Rectangle (Прямоугольник) и Circle (Окружность)
Пожалуйста помогите написать программу в С# Создать класс Рoint (Точка), а также классы Rectangle (Прямоугольник) и Circle...

Описать одну из геометрических фигур: круг, квадрат, прямоугольник, треугольник
Условие: Опишите запись с вариантами. Каждая запись описывает одну из геометрических фигур: круг, квадрат, прямоугольник, треугольник. ...

Опишите одну из геометрических фигур: круг, квадрат, прямоугольник, треугольник
Помогите решить такую задачку. Опишите запись с вариантами. Каждая запись описывает одну из геометрических фигур: круг, квадрат,...

Разработать базовый класс "прямоугольник", производный класс "Окно" и класс-контейнер "Список окон"
Реализовать все задачи в С # WPF 1. Разработать класс прямоугольник, имеющий координаты верхнего левого и нижнего правого угла, цвет...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru