Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 4

Классы, содержащие данные других классов

11.02.2016, 11:39. Показов 761. Ответов 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
//Rect.hpp
#include <iostream.h>
using namespace std;
 
class Point
{
    public:
    void SetX(int x) {itsX = x;}
    void SetY(int y) {itsY = y;}
    int GetX() const {return itsX;}
    int GetY() const {return itsY;}
    
    private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
    public:
    Rectangle(int top, int left, int bottom, int right);
    ~Rectangle(){}
    
    int GetTop() const {return itsTop;}
    int GetLeft() const {return itsLeft;}
    int GetBottom() const {return itsBottom;}
    int GetRight() const {return itsRight;}
    
    Point GetUpperLeft() const {return itsUpperLeft;}
    Point GetLowerLeft() const {return itsLowerLeft;}
    Point GetUpperRight() const {return itsUpperRight;}
    Point GetLowerRight() const {return itsLowerRight;}
    
    void SetUpperLeft(Point Location) {itsUpperLeft = Location;}
    void SetLowerLeft(Point Location) {itsLowerLeft = Location;}
    void SetUpperRight(Point Location) {itsUpperRight = Location;}
    void SetLowerRight(Point Location) {itsLowerRight = Location;}
    
    void SetTop(int top) {itsTop = top;}
    void SetLeft(int left) {itsLeft = left;}
    void SetBottom(int bottom) {itsBottom = bottom;}
    void SetRight(int right) {itsRight = right;}
    
    int GetArea() const;
    
    private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
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
//Rect.cpp
#include "Rect.hpp"
 
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
    itsTop = top;
    itsLeft = left;
    itsRight = right;
    itsBottom = bottom;
    
    itsUpperLeft.SetX(left);
    itsUpperLeft.SetY(top);
    
    itsUpperRight.SetX(right);
    itsUpperRight.SetY(top);
    
    itsLowerLeft.SetX(left);
    itsLowerLeft.SetY(bottom);
    
    itsLowerRight.SetX(right);
    itsLowerRight.SetY(bottom);
}
 
int Rectangle::GetArea() const
{
    int Width = itsRight - itsLeft;
    int Height = itsTop - itsBottom;
    return (Width * Height);
}
 
int main()
{
    Rectangle MyRectangle(100, 20, 50, 80);
    
    int Area = MyRectangle.GetArea();
    cout << "Area: " << Area << "\n";
    cout << "Upper Left X Coordinate: ";
    cout << MyRectangle.GetUpperLeft().GetX();
    
    system("PAUSE");
    return 0;
}
Выше представлен пример из книги, по которой я учу C++.
Вопрос конкретно в следующем:
- Как в классе Rectangle используется класс Point?
- Меня интересует конкретно отмеченная область:
C++
1
2
3
4
5
6
7
8
9
Point GetUpperLeft() const {return itsUpperLeft;}
    Point GetLowerLeft() const {return itsLowerLeft;}
    Point GetUpperRight() const {return itsUpperRight;}
    Point GetLowerRight() const {return itsLowerRight;}
    
    void SetUpperLeft(Point Location) {itsUpperLeft = Location;}
    void SetLowerLeft(Point Location) {itsLowerLeft = Location;}
    void SetUpperRight(Point Location) {itsUpperRight = Location;}
    void SetLowerRight(Point Location) {itsLowerRight = Location;}
Прошу, пожалуйста, популярно объясните, кому не сложно)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2016, 11:39
Ответы с готовыми решениями:

Непонятна тема (Классы содержащие другие классы, как данные члены )
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include &lt;iostream&gt; class Point { public: void...

Плохо ли делать зависящие друга от друга классы, в которых присутствуют указатели на обьекты других классов?
Тру девелоперы,расскажите,почему говорят,что плохо делать зависящие друга классы,в которых присутствуют указатели на обьекты других классов?

Преобразования объектов классов в объекты других классов
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50...

6
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
11.02.2016, 11:45
Rectangle содержит элементы типа Point
Цитата Сообщение от EthanOne Посмотреть сообщение
C++
1
2
3
4
5
private: 
  Point itsUpperLeft; 
  Point itsUpperRight; 
  Point itsLowerLeft; 
  Point itsLowerRight;
Соответственно, метод
C++
1
2
3
4
Point GetUpperLeft() const 
{
   return itsUpperLeft;
}
просто возвращает значение itsUpperLeft.
метод
C++
1
void SetUpperLeft(Point Location) {itsUpperLeft = Location;}
просто устанавливает значение itsUpperLeft.
и т.д.
2
 Аватар для ThePlague
104 / 104 / 99
Регистрация: 30.06.2015
Сообщений: 272
11.02.2016, 11:49
EthanOne, ну есть класс: точка и класс четырехугольник в этом классе в качестве атрибутов используются обьекты класса точка...а приведенные вами "гет" и "сет" функции это просто определение и возврат позиции точки (верх лево верх право низ лево и низ право...)
0
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 4
11.02.2016, 12:01  [ТС]
Спасибо) Но еще уточню. Меня волнуют там два ключевых слова в классе Rectangle: Point Location.
Как это работает хочу разобраться. Что делает - я понял. Но как это работает - вот это не понятно Там, например, метод SetUpperLeft() вовсе не вызывается явно.
0
 Аватар для ThePlague
104 / 104 / 99
Регистрация: 30.06.2015
Сообщений: 272
11.02.2016, 12:05
EthanOne, Point Location это просто название переменой типа точка

C++
1
void SetUpperLeft(Point что угодно!!!) {itsUpperLeft = что угодно!!!;}
1
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 4
11.02.2016, 12:13  [ТС]
ThePlague, спасибо!
А такое объявление переменной Point itsUpperLeft; в классе Rectangle означает, что переменная-член пренадлежит классу Point? И то же самое с методом Point GetUpperLeft() const {return itsUpperLeft;}
0
 Аватар для ThePlague
104 / 104 / 99
Регистрация: 30.06.2015
Сообщений: 272
11.02.2016, 12:20
EthanOne, первое да! второе нет! просто функция возвращает значение типа точка!
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2016, 12:20
Помогаю со студенческими работами здесь

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс CGraphicsObject, его наследник - базовый...

Класс содержащий элементы двух других классов
Задание у Страуструпа: При наличии определений struct S У меня что-то не получается так сделать struct S{int x,y;}; ...

Почему RTTI работает только с иерархией классов, содержащие виртуальные функции?
Почему RTTI работает только с иерархией классов, содержащие виртуальные функции?

Классы, наследование классов
Есть задание: Создать класс прямоугольник, члены класса – длины сторон a и b. Предусмотреть в классе методы вычисления и вывода...

Классы, иерархия классов
а) Создать иерархию классов здание, административное здание и жилое здание. Определить конструктор копирования, оператор присваивания через...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru