Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2013, 21:26   #1
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию Point это что? Я что-то нимогу нигде найти такой тип переменной!

Все же что это за тип данных или что это?

Представляте, позавчира три часа смотрел на страницу книги- разбирал его, пытался понять... Поначалу ве показалась мне совсем простым.. Дальше я попытался что-л понять , прослидить судьбу переменных. Задача аказалась грамоздкая и напутаная. Короче, через три часа я вобще перестал понимать что-л!!!!
Вчира скопировал в блокнот и комментиру. Ужас!
И еще 3, 5 часа размышлений и коментариев- я их добавляю, удаляю!!И точно ужас!!!
Сегодня- пример собствено ничего так, тдля примера показаны многие вещи, использование переменных функциями..

Подскажите пожалуста, по частям. Хотя бы в самых общих чертах, коротко.

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


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

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

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


Пример нормальный, как раз для разбора!


Код:
Листинг 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; >   // Используется для доступа к itsX 

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
Dimka-novitsek вне форума Ответить с цитированием
Старый 15.09.2013, 21:26   #2
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Код:
Листинг 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 = itsRight - 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).

*/

Последний раз редактировалось Dimka-novitsek; 15.09.2013 в 21:28.
Dimka-novitsek вне форума Ответить с цитированием
Старый 15.09.2013, 21:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
// Почему мы пишем Point вместо int или воид?
Потому что
Код:
3: class Point // хранит координаты x,y

4: {

5:    // нет конструктора, используется конструктор по умолчанию

6: public:

7:    void SetX(int x) { itsX = x; >   // Используется для доступа к itsX 

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
Раскрой глаза - этот класс выше определен. И методы работают с его типом.
Цитата:
Так обьявляют обьет, пиша вначале класс, а используют всюду как переменную!!
Что объявляют? Point это класс (описывает координаты точки), itsUpperLeft объект этого класса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2013, 21:41   #4
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Спасибо!! Щас..

Так itsUpperLeft объект этого класса. Но раньше в примерах этой книги я видел, что к обьекту класса, обращаются используя точку. Ну, хотя бы примерно так

Код:
Cat Frisky; 
      Frisky.Meow();
А тут обьект используется как-бы вовсе так, как переменная!! В таком случае, какой это тип переменной? Каково его числовое значение?

Последний раз редактировалось Stilet; 15.09.2013 в 22:22.
Dimka-novitsek вне форума Ответить с цитированием
Старый 15.09.2013, 21:48   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Класс представляет собой пользовательский тип данных, определяемый Вами.
Тип данных определяет диапазон значенй и набор допустимых операций с этим типом данных. Почему пользовательский? : потому, что он не определен в стандарте языка (не стандартизированы операции, диапазоны значений, размер данных этого типа данных в памяти), т.е компилятор о нем ничего не знает.
Т.е мы определить данные + операции для работы с ними. После этого, компилятору становится известно как трактовать данный пользовательский тип данных.
Таким образом, к Point можно относится как к некому типу данных.

Цитата:
Так itsUpperLeft объект этого класса. Но раньше в примерах этой книги я видел, что к обьекту класса, обращаются используя точку. Ну, хотя бы примерно так

Код:


Cat Frisky;
Frisky.Meow();

А тут обьект используется как-бы вовсе так, как переменная!! В таком случае, какой это тип переменной? Каково его числовое значение?
А это что, по Вашему?
Код:
itsUpperRight.SetY(top);

Последний раз редактировалось Stilet; 15.09.2013 в 22:29.
Igor95 вне форума Ответить с цитированием
Старый 15.09.2013, 21:59   #6
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Круто!! Спасибо!!
Dimka-novitsek вне форума Ответить с цитированием
Старый 15.09.2013, 22:21   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А тут обьект используется как-бы вовсе так, как переменная!
Объект это и есть переменная.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2013, 22:46   #8
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Microsoft описывает это так:
объект, в отличии от переменной, обладает поведением, т.е предоставляет интерфейс

Пруф дать не могу, т.к ссылку на соответсвующий раздел в msdn уже забыл... Помню, что статью читал в английском варианте
Igor95 вне форума Ответить с цитированием
Старый 15.09.2013, 23:31   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Microsoft описывает это так:
объект, в отличии от переменной, обладает поведением, т.е предоставляет интерфейс

Пруф дать не могу, т.к ссылку на соответсвующий раздел в msdn уже забыл... Помню, что статью читал в английском варианте
На языке с++ существуют термины "типы", "имена", "объекты":

Имя обозначает (денотирует) объект, функцию, тип, значение или метку. Имя вводится в программе описанием (#8). Имя может использоваться только внутри области текста программы, называемой его областью видимости. Имя имеет тип, определяющий его использование. Объект - это область памяти. Объект имеет класс памяти, определяющий его время жизни. Смысл значения, обнаруженного в объекте, определяется типом имени, использованного для доступа к нему.
(ц)Страуструп

Переменная - имя, через которое можно изменить состояние объекта.
Константа - имя, через которое нельзя изменить состояние объекта.

Последний раз редактировалось _Bers; 15.09.2013 в 23:35.
_Bers вне форума Ответить с цитированием
Старый 16.09.2013, 17:50   #10
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Спасибо!!!
Dimka-novitsek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что за тип такой char*** ntec Visual C++ 19 22.04.2012 13:01
если я хочу чтобы переменная была рандом, нужно просто написать, что типа а:=random? какой это будет тип переменных? gylayko Помощь студентам 6 04.10.2011 12:58
Что это за знак и что он значит? Яр|/||< (^_^) Свободное общение 10 04.07.2010 13:16
Эквалайзер...что это? кто это? Можно ли с ним подружиться? .Phoenix Мультимедиа в Delphi 45 08.04.2010 23:37
что это за theplanet.com такой? Постоянно приходят пакеты 67.15.231.73 на порт 80 Chi Безопасность, Шифрование 4 01.02.2009 23:52