Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы содержащие другие классы, как данные члены 
V
    Опции темы
Alexandr507
Дата 19.7.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: -1
Всего: -1



Код

1.    #include <iostream>

2.    class Point 

3.    {


4.    public:

5.    void SetX(int x)  { itsX = x;}
6.    void SetY(int y)  { itsY = y;}
7.    int GetX()  {return itsX;}
8.    int GetY()  {return itsY;}

9.    private:

10.    int itsX;
11.    int itsY;

12.    };

13.    class Rectangle

14.    {

15.    public:


16.    Rectangle (int top, int left, int bottom, int right);
17.    ~Rectangle() {}


18.    int GetTop()  {return itsTop;}
19.    int GetLeft()  {return itsLeft;}
20.    int GetBottom()  {return itsBottom;}
21.    int GetRight()  {return itsRight;}


22.    Point GetUpperLeft()   {return itsUpperLeft;}
23.    Point GetLowerLeft()   {return itsLowerLeft;}
24.    Point GetUpperRight()   {return itsUpperRight;}
25.    Point GetLowerRight()   {return itsLowerRight;}


26.    void SetUpperLeft (Point Location)
27.    {itsUpperLeft=Location;}
28.    void SetLowerLeft (Point Location)
29.    {itsLowerLeft=Location;}
30.    void SetUpperRight (Point Location)
31.    {itsUpperRight=Location;}
32.    void SetLowerRight (Point Location)
33.    {itsLowerRight=Location;}



34.    void SetTop (int top)  {itsTop = top;}
35.    void SetLeft (int left)  {itsLeft = left;}
36.    void SetBottom (int bottom) {itsBottom = bottom;}
37.    void SetRight (int right)  {itsRight = right;}


38.    int GetArea ();



39.    private:

40.    Point itsUpperLeft;
41.    Point itsLowerLeft;
42.    Point itsUpperRight;
43.    Point itsLowerRight;

44.    int itsTop;
45.    int itsLeft;
46.    int itsBottom;
47.    int itsRight;
48.    };



49.    Rectangle::Rectangle(int top, int left, int bottom, int right)

50.    {
51.    itsTop = top;
52.    itsLeft = left;
53.    itsBottom = bottom;
54.    itsRight = right;

55.    itsUpperLeft.SetX(left);
56.    itsUpperLeft.SetY(top);

57.    itsUpperRight.SetX(right);
58.    itsUpperRight.SetY(top);

59.    itsLowerLeft.SetX(left);
60.    itsLowerLeft.SetY(bottom);


61.    itsLowerRight.SetX(right);
62.    itsLowerRight.SetY(bottom);

63.    }

64.    int Rectangle::GetArea() 

65.    { 
66.    int Widht = itsRight-itsLeft;
67.    int Height = itsTop - itsBottom;
68.    return (Widht*Height);
69.    }


70.    int main()

71.    {

72.    Rectangle MyRectangle (100,20,50,80);

73.    int Area = MyRectangle.GetArea();

74.    std::cout<<"Area: "<<Area<<'\n';
75.    std::cout<<"Upper Left X Coordinate: ";
76.    std::cout<<MyRectangle.GetUpperLeft().GetX();

77.    return 0;


78.    }




Уважаемые программисты, в этом коде у меня имеются вопросы. 
Код из книги Джесс Либерти, 5-е издание, "Освой  самостоятельно С++".

В книге описывается все ясно и понятно, четко расписанно, но вдруг дается код, где много неясного, резкий переход от легкого к сложному,  и это новое сложное  как то нечетко расписывается.  я запутался.

  Надеюсь вы поможете.



1.  



Код

22.    Point GetUpperLeft()   {return itsUpperLeft;}
23.    Point GetLowerLeft()   {return itsLowerLeft;}
24.    Point GetUpperRight()   {return itsUpperRight;}
25.    Point GetLowerRight()   {return itsLowerRight;}



обьявление обьекта и его реализация.  Объект возвращает значение?  


2.

Код

13. class Rectangle
............

39.  private:

40.    Point itsUpperLeft;
41.    Point itsLowerLeft;
42.    Point itsUpperRight;
43.    Point itsLowerRight;


которое обьект одного класса   обьявлен как член - переменная другого класса. 





3.

Код

49.    Rectangle::Rectangle(int top, int left, int bottom, int right)

50.    {
51.    itsTop = top;
52.    itsLeft = left;
53.    itsBottom = bottom;
54.    itsRight = right;

55.    itsUpperLeft.SetX(left);
56.    itsUpperLeft.SetY(top);

57.    itsUpperRight.SetX(right);
58.    itsUpperRight.SetY(top);

59.    itsLowerLeft.SetX(left);
60.    itsLowerLeft.SetY(bottom);


61.    itsLowerRight.SetX(right);
62.    itsLowerRight.SetY(bottom);

63.    }



здесь интересуют строки 55-62

в конструкторе одного класса  вызов метода другого класса с помощью все тех же объектов





4.


Код

76.    std::cout<<MyRectangle.GetUpperLeft().GetX();




в main  вызов методов, обьясните в каком порядке происходит вызов методов в данной строке



PM MAIL   Вверх
ИванМ
Дата 19.7.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Код

std::cout<<MyRectangle.GetUpperLeft().GetX();

Сначала вызывается GetUpperLeft(), потом GetX(), потом <<
Остальные вопросы более конкретно сформируй. Что именно не понятно

PM MAIL   Вверх
Riddik
Дата 19.7.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Цитата(Alexandr507 @  19.7.2009,  14:27 Найти цитируемый пост)

Без подсветки
1:
2:
3:
4:
22.    Point GetUpperLeft()   {return itsUpperLeft;}
23.    Point GetLowerLeft()   {return itsLowerLeft;}
24.    Point GetUpperRight()   {return itsUpperRight;}
25.    Point GetLowerRight()   {return itsLowerRight;}


обьявление обьекта и его реализация.  Объект возвращает значение?  


Это функции-члены, которые возвращают объект типа Point. 
 
А именно, эти Point'ы возвращает соответствующа ф-ия:
Код

40.    Point itsUpperLeft;
41.    Point itsLowerLeft;
42.    Point itsUpperRight;
43.    Point itsLowerRight;


которые являются данными-членами класса Rectangle.

Цитата(Alexandr507 @  19.7.2009,  14:27 Найти цитируемый пост)
в конструкторе одного класса  вызов метода другого класса с помощью все тех же объектов


Да.

PM MAIL   Вверх
baldina
Дата 19.7.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код

class Point {...};

это класс Point (точка)

Код

class Rectangle {
...
Point top_left, top_right, bottom_left, bottom_right;
};

это класс Rectangle (прямоугольник). Прямоугольник определяется четырьмя точками в углах.
Point top_left; и т.п.  - объявление переменной-члена класса (Rectangle) типа Point;

Код

class Rectangle {
  ...
  Point GetTopLeft()   {return top_left;}
  ...
};


GetTopLeft() - функция-член (метод)  класса Rectangle, возвращающая значение левого верхнего угла (т.е. точку, т.е. объект типа Point).
Еще раз, подробнее по эту строчку Point GetTopLeft()   {return top_left;}
Point - тип возвращаемого значения
GetTopLeft() - имя функции
{return top_left;} - тело (реализация) функции
никаких "объявлений объектов" здесь нет

Теперь допустим у нас есть класс Point - точка на целочисленной плоскости
Код

class Point {
...
  public:
   void SetX (int);
   void SetY (int);
   int GetX();
   int GetY();
};


и объект p типа Point.

Код

Point p;


работа с объектом производится при помощи открытых (public) методов. Например, 
Код

p.SetX(10);
p.SetY(20);
std::cout << "x=" << p.GetX() << " y=" << p.GetY();

выведет на консоль "x=10 y=20"
Заметь, что мы не знаем внутреннего устройства класса Point, нам и не нужно, достаточно открытого интерфейса.

Вот здесь
Код

 itsUpperRight.SetX(right);
происходит то же самое. Вызывается метод SetX() класса Point у объекта itsUpperRight, который, конечно имеет тип Point.

Добавлено через 4 минуты и 7 секунд
Код

std::cout<<MyRectangle.GetUpperLeft().GetX();


тоже самое, что

Код

std::cout.operator<< ( (MyRectangle.GetUpperLeft()) . GetX() );


Это сообщение отредактировал(а) baldina - 19.7.2009, 19:09
PM MAIL   Вверх
Alexandr507
Дата 20.7.2009, 04:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: -1
Всего: -1



Спасиб всем , особенно baldina за развернутое объяснение.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1166 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.