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

Непонятна тема (Классы содержащие другие классы, как данные члены )

18.01.2012, 00:08. Показов 4541. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент)

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
class Point
{
public:
    void SetX(int x)  {
        itsX = x;
    }
    void SetY(int y)  {
        itsY = y;
    }
    int GetX()  {
        return itsX;
    }
    int GetY()  {
        return itsY;
    }
private:
    int itsX;
    int itsY;
};
class Rectangle
{
public:
    Rectangle (int top, int left, int bottom, int right);
    ~Rectangle() {}
    int GetTop()  {
        return itsTop;
    }
    int GetLeft()  {
        return itsLeft;
    }
    int GetBottom()  {
        return itsBottom;
    }
    int GetRight()  {
        return itsRight;
    }
    Point GetUpperLeft()   {
        return itsUpperLeft;
    }
    Point GetLowerLeft()   {
        return itsLowerLeft;
    }
    Point GetUpperRight()   {
        return itsUpperRight;
    }
    Point GetLowerRight()   {
        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 ();
private:
    Point itsUpperLeft;
    Point itsLowerLeft;
    Point itsUpperRight;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
    itsTop = top;
    itsLeft = left;
    itsBottom = bottom;
    itsRight = right;
    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()
{
    int Widht = itsRight - itsLeft;
    int Height = itsTop - itsBottom;
    return (Widht * 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();
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!


Программа сама по себе не компилируется(выдает следующую ошибку E2015 Ambiguity between 'Point' and '_fastcall Classes::Point(int,int)'следовательно код изменить не могу(чтобы найти ответы на вопросы) и найти ошибку тоже
Не совсем понятно как работает программа(точнее совсем непонятно)
непонятно по какому принципу работают строчки кода 18-37 и 76

Добавлено через 17 минут
после редактирования сообщения,строчки кода непонятны начиная с 26-77.и 116.не понятно как вызывается GetUpperLeft если не вызывалась SetUpperLeft
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2012, 00:08
Ответы с готовыми решениями:

Программа по классам, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы
Нужно написать программу, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы. Реализовать её нужно в трех...

Классы, содержащие данные других классов
Извините за, возможно, нубовский вопрос, но я хочу разобраться, что происходит в примере ниже. //Rect.hpp #include...

Классы, включающие другие классы
Столкнулся вот с таким кодом: #include &lt;iostream&gt; class Point { public: void SetX(int x) {itsX = x;} void SetY(int y) ...

17
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 00:11
похоже компилишь в MSVS? если да, то версия?
0
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
18.01.2012, 00:13  [ТС]
компилятор borland builder 6
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 00:22
не знаю почему такая ошибка, у меня компилится на разных компиляторах (кроме борланда - не имею)
0
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
18.01.2012, 00:25  [ТС]
могли бы вы объяснить как работает данная программа,в книге невнятное объяснение дано,хотя до этого автор все поясняет подробно,что никаких вопросов не возникает
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 01:04
функции Get**** - предназначены для получения координат углов прямоугольника
например, GetUpperLeft - верхнего левого
соответственно Set****** - для установки(изменения) текущих координат
в строке 116 GetUpperLeft вызывается без SetUpperLeft, т.к. координаты были уже заданы при создании переменной тут:
C++
1
Rectangle MyRectangle (100, 20, 50, 80);
в этой строчке используется создание( или инициализация/конструирование) переменной MyRectangle при помощи этого конструктора:
C++
1
Rectangle (int top, int left, int bottom, int right);
1
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
18.01.2012, 01:19  [ТС]
Уточню как раз непонятно как GetUpperLeft возращает значение itsUpperLeft,если нигде этому параметру значение не присваивалось,да в конструктор поступают четыре параметра,но они присываются параметрам itsTop и т.д в строчке itsUpperLeft.SetX(left) передается параметр left,потом его можно вызвать itsUpperLeft.GetX..
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 01:22
вот здесь и присваивалось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
    itsTop = top;
    itsLeft = left;
    itsBottom = bottom;
    itsRight = right;
    itsUpperLeft.SetX(left);
    itsUpperLeft.SetY(top);
    itsUpperRight.SetX(right);
    itsUpperRight.SetY(top);
    itsLowerLeft.SetX(left);
    itsLowerLeft.SetY(bottom);
    itsLowerRight.SetX(right);
    itsLowerRight.SetY(bottom);
}
1
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
18.01.2012, 01:35  [ТС]
к сожалению я понимаю выше указанное как строчки с 3-6 присвоение..тут вопросов нет..а строчки с 7-14 передача параметров соответственно в функции SetX и SetY,и то что я потом могу отобразить их с помощью GetX и GetY..но так и не понимаю где присвоение параметру UpperLeft
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 01:43
itsUpperLeft имеет тип Point. и вызововы
C++
1
2
    itsUpperLeft.SetX(left);
    itsUpperLeft.SetY(top);
равносилны вызову
C++
1
SetUpperLeft (Point Location)
1
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
18.01.2012, 09:54  [ТС]
я понял что в данном примере это равносильно вызову(к сожалению написать подобную программу не смогу,по причине того ,что смысл так и не понятен где здесь параметру itsUpperLeft.SetX(left) присваивается значение точки...я понимаю(к сожалению повторюсь) посредством параметра itsUpperLeft типа Point передаю в функцию SetX(значение left) вызову допустим itsUpperLeft.GetX() получу отображение параметра...думал что возможно строчку void SetUpperLeft(Point Location) надо понимать так вместо параметра Location типа point передается значение setX(left) ...но здесь передается сразу два параметра SetX и SetY,получается что параметр Location передает сразу два параметра?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 10:19
Цитата Сообщение от Arver Посмотреть сообщение
где здесь параметру itsUpperLeft.SetX(left) присваивается значение точки
значение точке itsUpperLeft присваивается двумя выражениями
C++
1
2
    itsUpperLeft.SetX(left);
    itsUpperLeft.SetY(top);
1
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
18.01.2012, 12:15  [ТС]
тоесть я верно предположил,что если бы я передавал параметры через функцию void SetUpperLeft(Point Location) переменная Location типа Point передает сразу два значения или все таки передает значение одно(которое определяется двумя координатами)?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 13:20
здесь нужно понять, что объект типа Point представляет собой одно (цельное) значение (точка, координата на плоскости), которое реализовано с помощью двух обьектов типа int.
и передавая в ф-ю обьект типа Point, вы технически передаете два обьекта типа int как одно логически целое
0
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
18.01.2012, 23:34  [ТС]
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
#include<iostream.h>
#include <vcl.h>
#pragma hdrstop
#pragma argsused
class point{
public:
void SetX(int x){a=x;}
int GetX(){return a;}
int SetY(){return b;}
void SetY(int y){b=y;}
private:
int a;
int b;        };
 class tochka{
public:
tochka(int x,int y);
~tochka(){}
point Vozvrat(){return parametr;}
private:
point parametr;};
tochka::tochka(int x,int y){
parametr.SetX(x);
parametr.SetY(y);
                  }
int main(){
tochka koordinat(5,5);
cout<<koordinat.Vozvrat().GetX();
Sleep(1000);
        return 0;
             }
Я понял мысль верно?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 23:52
Цитата Сообщение от Arver Посмотреть сообщение
Я понял мысль верно?
мыслей не читаю, поэтому не знаю, что вы хотели сделать)
но код работать должен и выведет то что хранится в а
0
0 / 0 / 0
Регистрация: 15.07.2010
Сообщений: 68
19.01.2012, 00:46  [ТС]
Retmas,спасибо тебе за помощь,наконец-то разобрался в этой теме,будем изучать c++ дальше
0
2 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 8
25.02.2013, 14:09
Извиняюсь, что поднимаю прошлогоднюю тему, но сейчас изучаю именно эту главу и тоже возникли проблемы. С самим кодом вроде как разобрался, но в в шестом билдере все равно не получается его скомпилить. Выдает ошибку в main() "undefined symbol MyRectangle". Хотя вроде как класс Rectangle объявлен, но когда создаешь объект MyRectangle этого класса и потом пытаешься использовать какую-нибудь его функцию-член написав в листе "MyRectangle." (на что билдер должен предложить функции, которые можно использовать), вместо этого он выдает ошибку "unable to invoke code completion due to errors in source code".
Может кто помочь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2013, 14:09
Помогаю со студенческими работами здесь

Intellij - как создать темплейт класса и чтоб его имя добавлялось в другие классы
че как программеры?) Использую Intellij IDE и JAVA, по работе нужно постоянно создавать однотипные классы которые наследуют от другого...

Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но через классы
Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но используя соотвественно классы И как...

Классы (статические члены и конструктор копирования)
Добрый вечер! Написал программку, все нормально работает, но есть два нюанса: необходимо сделать счетчик количества записей через...

тема классы
Ребята, помогите лабораторки доделать. Введите текст.Удалите все пробелы. с помощью классов написать просят

Тема: Классы
Задание Описать класс «студенческая группа». Предусмотреть возможность работы с произвольным числом студентов, поиска студента по...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru