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

Пример из книги- ну, напутан - C++

Восстановить пароль Регистрация
 
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
14.09.2013, 23:22     Пример из книги- ну, напутан #1
Представляте, вчира три часа смотрел на страницу книги- разбирал его, пытался понять... Поначалу ве показалась мне совсем простым.. Дальше я попытался что-л понять , прослидить судьбу переменных. Задача аказалась грамоздкая и напутаная. Короче, через три часа я вобще перестал понимать что-л!!!!
Сегодня скопировал в блокнот и комментиру. Ужас!
И еще 3, 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
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
Листинг 6.8. Объявление классов точки и прямоугольника
 
1: // Начало файла Rect.hpp
 
2: #include <iostream.h>
 
3: class Point // хранит координаты x,y
 
4: {
 
5:    // нет конструктора, используется конструктор по умолчанию
 
6: public:
 
7:    void SetX(int x) { itsX = x; >   // 
 
8:    void SetY(int у) { itsY = у; }  // 
 
9:    int GetX() const < return itsX;}
 
10:   int GetY() const { return itsY;}
 
11: private:
 
12:   int itsX;
 
13:   int itsY;
 
14: }; // конец объявления класса Point
 
15:
 
16:
 
17: class Rectangle
 
18: {
 
19: public:
 
20:   Rectangle(int top, int left, int bottom, int right):.; //  Это видно конструктор. Что за точки в его конце?
 
21:   ~Rectangle() {}
 
22:
 
23:   int GetTop() const { return itsTop; }  // Где в программе дальше используется функция GetTop ???
 
24:   int GetLeft() const { return itsLeft; } // Где в программе дальше используется функция GetLeft ???
 
25:   int GetBottom() const { return itsBottom; } // Где в программе дальше используется функция GetBottom ???
 
26:   int GetRight() const { return itsRight; }  // Где в программе дальше используется функция GetRight ???
 
27:
 
28:   Point GetUpperLeft() const { return itsUpperLeft; }   //  Почему мы пишем Point вместо int или воид?
 
29:   Point GetLowerLeft() const { return itsLowerLeft; }    //  Почему мы пишем Point вместо int или воид? Где, где вобще как-л ипользуется эта функция?
 
30:   Point GetUpperRight() const { return itsUpperRight; }  //  Почему мы пишем Point вместо int или воид?  Где, где вобще как-л ипользуется эта функция?
 
31:   Point GetLowerRight() const { return itsLowerRight; }  //  Почему мы пишем Point вместо int или воид? Где, где вобще как-л ипользуется эта функция?
 
32: 
 
33:   void SetUpperLeft(Point Location) {itsUpperLeft = Location; }  //Почему этим разным переменным мы присваиваем значение Location?
                                                                        //Где, где вобще как-л ипользуется эта функция?
34:   void SetLowerLeft(Point Location) {itsLowerLeft = Location; }   //Почему этим разным переменным мы присваиваем значение Location?
                                                                        //Где, где вобще как-л ипользуется эта функция?
35:   void SetUpperRight(Point Location) {itsUpperRight = Location; }  //Почему этим разным переменным мы присваиваем значение Location?
                                                                       //Где, где вобще как-л ипользуется эта функция?    
36:   void SetLowerRight(Point Location) {itsLowerRight = Location; }  //Почему этим разным переменным мы присваиваем значение Location?
                                                                       //Где, где вобще как-л ипользуется эта функция?
37:
 
38:   void SetTop(int top) { itsTop = top; }    // А не используется!!  
 
39:   void SetLeft (int left) { itsLeft = left; }  // А не используется!! 
 
40:   void SetBottorn (int bottom) { itsBottom = bottom; }  // А не используется!! 
 
41:   void SetRight (int right) { itsRight = right; }     // А не используется!! 
 
42:
 
43:   int GetArea() const;
 
44:
 
45: private:
 
46:   Point itsUpperLeft;  // Что за Point?? Очевидно, что itsUpperLeft переменная? Или таки обьект??
 
47:   Point itsUpperRight;  // Что за Point?? Очевидно, что itsUpperRight переменная? Или таки обьект??
 
48:   Point itsLowerLeft;  // Что за Point?? Очевидно, что itsLowerLeft переменная? Или таки обьект??
 
49:   Point itsLowerRight; // Что за Point?? Очевидно, что itsLowerRight переменная? Или таки обьект??
 
50:   int itsTop;
 
51:   int itsLeft;
 
52:   int itsBottom;
 
53:   int itsRight;
 
54: };
 
55: // конец файла Rect.hpp
 
 
 
Листинг 6.9. Содержимое файла RECT.cpp
 
1: // Начало файла rect.cpp
 
2: #include "rect.hpp"
 
3: Rectangle::Rectangle(int top, int left, int bottom, int right)  // Конструктор Rectangle
 
4: {
 
5:    itsTop = top; //Здесь используется присвоение внутри конструктора, а у нас собствено есть функция 
                     //void SetTop(int top) { itsTop = top; } Почему так и так? Это смысл или нидочет?
6:    itsLeft = left;//Также сдесь
 
7:    itsBottom = bottom;//Также сдесь
 
8:    itsRight = right;//Также сдесь
 
9:
 
10:   itsUpperLeft.SetX(left);//  Переменной itsX присваиваем left(левый), при этом также ее присваиваем itsLeft, при 
                              // этом left обьявлена и видна в конструкторе,x обьявлена и видна в публичной функции, 
                              // itsX обьявлена и видна в приватной части класса Point и собствено больше не используется!
                              
11:   itsUpperLeft.SetY(top);//Переменной itsY присваиваем top (верхний), при этом также ее присваиваем itsTop, при 
                              // этом top обьявлена и видна в конструкторе,у обьявлена и видна в публичной функции, 
                              // itsY обьявлена и видна в приватной части класса Point и собствено больше не используется! 
12:
 
13:   itsUpperRight.SetX(right);//За каким-то чёртом создаем еще обьект itsUpperRight и переменной itsX присваиваем right (правый), 
                              // при этом также ее присваиваем itsRight, при 
                              // этом right обьявлена и видна в конструкторе,x обьявлена и видна в публичной функции, 
                              // itsX обьявлена и видна в приватной части класса Point и собствено больше не используется!
 
14:   itsUpperRight.SetY(top);//За каким-то чёртом создаем еще обьект itsUpperRight и переменной itsY присваиваем top (верхний), 
                              // при этом также ее присваиваем itsTop, при 
                              // этом top обьявлена и видна в конструкторе,у обьявлена и видна в публичной функции, 
                              // itsY обьявлена и видна в приватной части класса Point и собствено больше не используется! 
 
15:
 
16:   itsLowerLeft.SetX(left);//Повторяем строку 10 с обьектом itsLowerLeft!!!!
 
17:   itsLowerLeft.SetY(bottom);//С этим же обьектом itsLowerLeft itsY присваиваем bottom (нижний), при этом также ее присваиваем itsBottom, при 
                              // этом bottom обьявлена и видна в конструкторе,у обьявлена и видна в публичной функции, 
                              // itsY обьявлена и видна в приватной части класса Point и собствено больше не используется! !!!!
 
18:
 
19:   itsLowerRight.SetX(right);//За каким-то чёртом создаем еще обьект itsLowerRight и переменной itsX присваиваем right (правый), 
                              // при этом также ее присваиваем itsRight, при 
                              // этом right обьявлена и видна в конструкторе,x обьявлена и видна в публичной функции, 
                              // itsX обьявлена и видна в приватной части класса Point и собствено больше не используется!
 
20:   itsLowerRight.SetY(bottom);//За каким-то чёртом создаем еще обьект itsLowerRight и переменной itsY присваиваем bottom (нижний), при этом также ее присваиваем itsBottom, при 
                              // этом bottom обьявлена и видна в конструкторе,у обьявлена и видна в публичной функции, 
                              // itsY обьявлена и видна в приватной части класса Point и собствено больше не используется! !!!!
 
21: }
 
22:  // А вобще разве не правамерно использовать обьект и точку в маин, а не в конструкторе? Это можно так и правильно?
 
23: //Короче жуткая ересь!! Автор был сильно пьян!!
 
24: // Вычисляем площадь прямоугольника, отыскивая его стороны
 
25: // определяем его длину и ширину, а затем перемножаем их
 
26: int Rectangle::GetArea() const
 
27: {
 
28:   int Width = itsRignt - itsLeft;//Правый минус левый
 
29:   int Height = itsTop - itsBottom; //Верхний минус нижний
 
30:   return (Width >> Height);  //А где а затем перемножаем их??  Десять минут искал гд-л значок множиния!!А, я таки должен 
                                 // сам его проставить...
 
31: }
 
32:
 
33: int main()
 
34: {
 
35:   //инициализируем локальную переменную Rectangle
 
36:   Rectangle MyRectangle (100, 20, 50, 80 );
 
37:
 
38:   int Area = MyRectangle.GetArea();
 
39:
 
40:   cout  << "Area: " << Area  << "\n";
 
41:   cout  << "Upper Left X Coordinate:";
 
42:   cout  << MyRectangle.GetUpperLeft().GetX();
 
43:   return 0;
 
44: }
 
/*  Мы передаем четыре координаты ага для двух точек в обьект MyRectangle. Да нет, это четыре отдельные точки!!
Но как же? Ведь каждая точка мает две координаты???!! Четыре, пусть три точки должны быть - и восемь ( ну шесть) координат!!
 
Цитата автора Конструктор класса Rectangle принимает четыре целочисленных параметра, именуемых top (верхний), left (левый), bottom (нижний) и right (правый). Эти четыре параметра, передаваемые конструктору, 
копируются в соответствующие четыре пере- менные-члена (см. листинг 6.9), после чего устанавливаются четыре точки (четыре объекта класса Point).
 
*/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 23:22     Пример из книги- ну, напутан
Посмотрите здесь:

Пример из книги не работает. C++
пример из книги страуструпа C++
C++ Пример из книги Лафоре
C++ Непонятный пример из книги
C++ Пример из книги. Шилдт
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
14.09.2013, 23:29     Пример из книги- ну, напутан #2
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
вчира три часа смотрел на страницу книги- разбирал его, пытался понять
а не надо стараться понять. лучше самому с нуля написать эти классы Точка и Прямоугольник. Больше пользы будет
Belfegor
14.09.2013, 23:30
  #3

Не по теме:

форум превращается в чей-то твиттер

coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.09.2013, 23:47     Пример из книги- ну, напутан #4
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
напутан

Не по теме:

на каких путан?

Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11816 / 6795 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
15.09.2013, 00:37     Пример из книги- ну, напутан #5
Лучше сначала еще раз почитайте что такое функции, возвращаемое значение, классы, переменные и т.д., то бишь самые первые главы учебника
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
15.09.2013, 18:17  [ТС]     Пример из книги- ну, напутан #6
Подскажите пожалуста, по частям. Хотя бы в самых общих чертах, коротко.

28: Point GetUpperLeft() const { return itsUpperLeft; } // Почему мы пишем Point вместо int или воид?


Дальше. Вот не пойму. Так обьявляют обьет, пиша вначале класс, а используют всюду как переменную!!

46: Point itsUpperLeft; // Что за Point?? Очевидно, что itsUpperLeft переменная? Или таки обьект??

И вот. Эта функция как-бы должна использоваться для присвоения itsUpperLeft значения но снова что это за Point?
33: void SetUpperLeft(Point Location) {itsUpperLeft = Location; }

Добавлено через 8 минут
Пример нормальный, как раз для разбора!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11816 / 6795 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
15.09.2013, 18:24     Пример из книги- ну, напутан #7
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Почему мы пишем Point вместо int или воид?
а почему мы пишем int вместо double?

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Так обьявляют обьет, пиша вначале класс, а используют всюду как переменную!
Цитата Сообщение от Croessmah Посмотреть сообщение
Лучше сначала еще раз почитайте что такое функции, возвращаемое значение, классы, переменные
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 18:47     Пример из книги- ну, напутан #8
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Point itsUpperLeft; // Что за Point?? Очевидно, что itsUpperLeft переменная? Или таки обьект??
itsUpperLeft обычная переменная, ее тип Point.
А Point это класс, который содержит две закрытых переменных itsX и itsX и несколько функций.

можно установить значение для переменной itsX, вызвав функцию из этого класса SetX(int x)
можно прочитать значение которое записано в переменной itsX с помощью функции GetX()

то же самое относится к переменной itsY
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
15.09.2013, 20:16  [ТС]     Пример из книги- ну, напутан #9
Читал-перечитывал, не понял. Все же что это за тип данных или что это?

Добавлено через 29 секунд
О, вижу. СПАСИБО!!!

Добавлено через 4 минуты
Вы знаете, чтто-то я ни в книге, ни в гугле не вижу тип данных Point

К целочисленным типам относятся типы, представленные следующими именами основных типов:
char
short
int
long

Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа:
signed
unsigned

Эти модификаторы изменяют формат представления данных, но не влияют на размеры выделяемых областей памяти.

А вот сочетания имён типов и модификаторов для представления чисел с плавающей точкой:
float
double
long double

Вот и всё об основных типах.

Добавлено через 1 минуту
Что Point это класс, я вижу. Но если это посто название класса, как он стоит вместо типа переменной?
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 21:27     Пример из книги- ну, напутан #10
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Что Point это класс, я вижу. Но если это посто название класса, как он стоит вместо типа переменной?
вот такие они эти классы. их можно использовать как тип переменной
C++
1
2
int      number;   // тип переменной int
Point   point;     // тип переменной Point
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
15.09.2013, 21:38  [ТС]     Пример из книги- ну, напутан #11
Обалдеть!! СПАСИБО!!!!

Добавлено через 7 минут
Как программа знает, обьект это или переменная? Как я вижу, обьявляются они одинаково! И какой же будет тип такой переменной?
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 21:44     Пример из книги- ну, напутан #12
Цитата Сообщение от _ Посмотреть сообщение
их можно использовать как тип переменной
я немного криво написал.

Можно сказать что классы как раз для этого и создают.

Вот простенькая программа с классом Point.


давай предположим что нам дали задание написать программу для работы с треугольниками.
У любого треугольника три вершины. И каждая вершина имеет две координаты. Х и Y. Правильно?


Вот мы создаем класс Point (по русски точка), в котором две переменные X и Y;



C++
1
2
3
4
5
6
class Point
{
public:
    int x;
    int y;
};

Теперь в главной программе можно создать его вершины

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    Point A;    // первая вершина треугольника
    Point B;    // вторая вершина треугольника
    Point C;    // третья вершина треугольника
    
    A.x = 0;    // тут установим координаты для вершины A
    A.y = 0;
    
    B.x = 1;    // то же самое для второй вершины треугольника
    B.y = 2;
    
    // А здесь можно установить координаты для третьей вершины
}
sv_11
0 / 0 / 0
Регистрация: 29.10.2012
Сообщений: 4
15.09.2013, 21:47     Пример из книги- ну, напутан #13
А в какой книге такие классы пишут?
Код
public:
 
7:    void SetX(int x) { itsX = x; >   // 
 
8:    void SetY(int у) { itsY = у; }  // 
 
9:    int GetX() const < return itsX;}
 
10:   int GetY() const { return itsY;}
класс слегка "кривой" и мне кажется что то что там описано вам врятли пригодится, рекомендую переписать самому, заодно поймеш как с ним работать.
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
15.09.2013, 21:49  [ТС]     Пример из книги- ну, напутан #14
СПАСИБО!!
sv_11
0 / 0 / 0
Регистрация: 29.10.2012
Сообщений: 4
15.09.2013, 21:52     Пример из книги- ну, напутан #15
А point пишется ровно по тому что функция возвращает не какое то значение, а объект (типа point) вот все.
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
15.09.2013, 22:14  [ТС]     Пример из книги- ну, напутан #16
Ага!!!! ...И в данном случае обьект будет иметь конкретного числовое значение? А к какому типу переменной его можно будет прировнять?

Добавлено через 9 минут
Пример-супер!!!!!!
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 22:22     Пример из книги- ну, напутан #17
Dimka-novitsek, я рад что понравился пример)
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
15.09.2013, 22:33  [ТС]     Пример из книги- ну, напутан #18
Я тоже!

Добавлено через 34 секунды
Спасибо!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 22:35     Пример из книги- ну, напутан
Еще ссылки по теме:

Простой пример из книги C++
Пример с книги не компилируется! C++
C++ пример из книги

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

Или воспользуйтесь поиском по форуму:
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 22:35     Пример из книги- ну, напутан #19
всегда рад помочь
Yandex
Объявления
15.09.2013, 22:35     Пример из книги- ну, напутан
Ответ Создать тему
Опции темы

Текущее время: 23:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru