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

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

Войти
Регистрация
Восстановить пароль
 
svpol
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 9
#1

Классы, включающие другие классы - C++

18.10.2012, 02:48. Просмотров 857. Ответов 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
#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;
}
Вроде все скомпилировалось нормально, непонятно только какую полезную функцию здесь выполняет следующий фрагмент кода:
C++
1
2
3
4
5
6
7
8
    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;}
Ведь если я правильно понимаю, он устанавливает координаты четырех точек объекта класса Rectangle. Но ведь ту же самую функцию выполняет и конструктор? Я попытался убрать эту часть кода и перекомпилировать, результат получился тот же самый. Одним словом, объясните, есть ли тут смысл или это просто некорректный код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 02:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы, включающие другие классы (C++):

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

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

Наследование, базовые классы и производные классы - C++
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

классы/дочерние классы/методы - C++
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через GetTip. h файл class Book { protected: char...

Классы возможностей(Mixin классы) - C++
Не могу понять смысла использования mixin классов( это класс в котором есть только методы и нет членов-данных) Т.е. к примеру у нас...

5
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,577
18.10.2012, 08:49 #2
конструктор выполняет ту же самую функцию при инициализации. если вам необходимо изменить данные поля объекта после его создания у вас два пути - через создание еще одного объекта с нужными вам значениями полей при помощи конструктора и присваивание его существующему объекту (некрасиво, лишняя работа и не всегда возможно) или модификация нужных вам полей при помощи этих самых функций.
0
svpol
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 9
18.10.2012, 10:00  [ТС] #3
Цитата Сообщение от vxg Посмотреть сообщение
конструктор выполняет ту же самую функцию при инициализации. если вам необходимо изменить данные поля объекта после его создания у вас два пути - через создание еще одного объекта с нужными вам значениями полей при помощи конструктора и присваивание его существующему объекту (некрасиво, лишняя работа и не всегда возможно) или модификация нужных вам полей при помощи этих самых функций.
А разве недостаточно для этого только последние четыре строки.
C++
1
2
3
4
5
    
void SetTop (int top)  {itsTop = top;}
void SetLeft (int left)  {itsLeft = left;}
 void SetBottom (int bottom) {itsBottom = bottom;}
 void SetRight (int right)  {itsRight = right;}
И что это за загадочный атрибут Point Location? То есть понятно, зачем он нужен, но если возникнет необходимость, как мне практически изменить данные, допустим, с помощью ф-ции void SetUpperLeft (Point Location)? Что я должен подставить вместо этого Point Location? Ведь у объекта типа Point два значения, а у тут только один.
0
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
18.10.2012, 10:20 #4
Цитата Сообщение от svpol Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
private:
    Point itsUpperLeft;
    Point itsLowerLeft;
    Point itsUpperRight;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
Дублируемая информация. Первые четыре поля не нужны. К тому же, методы-мутаторы (Set...) неправильно их обновляют.
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
18.10.2012, 10:43 #5
Прямоугольник имеет 4 точки, каждая из которых определяется 2мя координатами. Наверное, это имелось ввиду в классе прямоугольника. Что такое top, left, bottom и right - загадка.
0
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,577
18.10.2012, 12:53 #6
Point Location - это не атрибут это объект Location класса Point - мы передаем в функцию в качестве аргумента объект-точку, внутри функции эта точка присваивается некоторому полю сокрытому в нашем классе. как отметили Кот Ангенс и John Prick с классом прямоугольника что то намудрено - он описан два раза - в виде собственно точек и в виде границ по осям. не исключено что это было сделано преднамеренно для того что бы иметь под рукой данные нужного формата - например, человек знает что в программе очень много вызовов будут требовать в качестве данных объект-точку, а другая гора вызовов - границы. вот он и заложил представление одной и той же информации в нескольких формах. но это очень специфическое решение и на то должны были быть веские основания... хотя, может мы просто придумываем то чего нет на самом деле и объекты-точки представляют собой координаты в системе координат модели, а границы - координаты в оконной системе координат. поэтому они и обновляются отдельно и никак не влияют друг на друга.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 12:53
Привет! Вот еще темы с ответами:

Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы - C++
Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы Abiturient:...

Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур. - C++
Здраствуйте.Помогите с практичкой мое задание 4.3. Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о....

Классы в С++ - C++
помогите решить две задачки на С++ 1) Создать класс Angle для работы с углами на плоскости, задаваемыми величиной в градусах и...

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


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

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

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