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

Отношения между классами и объектами

15.04.2013, 15:42. Показов 8070. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для каждого индивидуального варианта необходимо создать консольную программу на С++, реализующую отношение ассоциации (агрегации или композиции) между классами и объектами.
Класс «КОМНАТА», содержит закрытые поля: сведения о метраже, высоте потолков и количестве окон и метод подсчета площади комнаты. Класс «КВАРТИРА», содержит закрытые поля: номер этажа, массив объектов класса «КОМНАТА», метод подсчета площади квартиры и метод вывода информации о комнатах квартиры.
За ранее спосибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2013, 15:42
Ответы с готовыми решениями:

OOP (все принципы ООП и основные отношения между классами)
Здравствуйте, помогите пожалуйста. Стоит задача показать все принципы ООП и основные отношения между класами. Сильно не ругайтесь, только...

Задача на тему робота с классами и объектами в С++
Класс Coins (монеты). Класс сохраняет массив из 3 монет та общее количество лицевых сторон после последнего подбрасывания . Должны быть...

Как работает ссылка с объектами, классами и перегруженным оператором []
Я тут решил поиграться с кодом и понял что совершенно не догоняю как работает ссылка & Есть код нормально работающий: #include...

21
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 16:33
C++
1
2
3
4
5
6
7
class Room;
class Flat
  {
  private:
    std::vector<Room*> rooms; //агрегация
    std::vector<Room> rooms; //композиция
  };
п.с. Хотя в отношениях с++ настоящая композиция должна выглядеть так. Потому-что я могу создавать комнаты не на стеке.
C++
1
std::vector<std::auto_ptr<Room*> > rooms;
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
15.04.2013, 16:53  [ТС]
stima, А как программа начинается например #include <iomanip>,мне на C++ надо написать.Заранее спосибо
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 18:42
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
#include <vector>
#include <iostream>
#include <algorithm>
 
class Room
  {
  friend std::ostream& operator<<(std::ostream&, const Room&);
 
  public:
    Room() {}
    Room(int width, int height, int length, int windows = 0)
      : _width(width), _height(height), _length(length), _windows(windows) {}
 
    int width()   const { return _width; }
    int height()  const { return _height; }
    int length()  const { return _length; }
    int windows() const { return _windows; }
 
    int square()  const { return _width * _length; }
 
  private:
    int _width;
    int _height;
    int _length;
    int _windows;
  };
  
class Flat
  {
  friend std::ostream& operator<<(std::ostream&, const Flat&);
 
  public:
    Flat(int level) : _level(level) {}
 
    Room* add_room(Room* room)
      {
      _rooms.push_back(room);
      return _rooms.back();
      }
    
    Room* add_room(int width, int height, int length)
      {
      _rooms.push_back(new Room(width, height, length));
      return _rooms.back();
      }
 
    void remove_room(Room *room)
      {
      std::remove_if(_rooms.begin(), _rooms.end(),
        [&room](Room *it){ return room == it; });
      }
 
    int rooms_count() const { return _rooms.size(); }
 
  private:
    int _level;
    std::vector<Room*> _rooms;
  };
 
std::ostream& operator<<(std::ostream& out, const Room& room)
  {
    return out << "Room's"
               << " width: "  << room.width()
               << " height: " << room.height()
               << " length: " << room.length();
  }
 
std::ostream& operator<<(std::ostream& out, const Flat& flat)
  {
    out << "Flat's level " << flat._level << std::endl;
    out << "Contains rooms: " << std::endl;
 
    std::for_each(flat._rooms.begin(), flat._rooms.end(),
      [&out](Room *it)
        {
        out << *it << std::endl;
        });
 
    return out;
  }
 
int main()
  {
  std::vector<Room*> other_rooms;
  other_rooms.push_back(new Room(10, 10, 10));
 
  Flat flat(2);
  
  Room *room = flat.add_room(new Room(20, 20, 20));
  other_rooms.push_back(room);
 
  flat.add_room(other_rooms[0]);
 
  std::cout << "My new flat is " << flat << std::endl;
  std::cin.get();
 
  return 0;
  }
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.04.2013, 19:00
Цитата Сообщение от stima Посмотреть сообщение
std::vector<std::auto_ptr<Room*> > rooms;
auto_ptr в контейнере - верный способ выстрелить себе в ногу - это раз.
auto_ptr - deprecated - это два.
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 19:41
Неумение думать это верный способ выстрелить себе в ногу. Это агрегация, а значит, если с контейнера будет убран объект, то владение теряется! Так, что в этом случае мне все равно на лимитацию STL.

п.с. Хотя сильно спорить не буду. Все зависит от конкретной реализации. Имелось ввиду, что для композиции необязательно создавать обьект на стеке.

Добавлено через 7 минут
п.с.с.
Ошибся). Это композиция и владеть обьектом никто кроме контейнера не должен.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
15.04.2013, 19:43
auto_ptr в векторе означает, что на каждом изменении размера внутреннего хранилища все объекты, указатели на которые хранились в контейнере, будут уничтожены, а сами указатели станут висячими. При следующем изменении размеров хранилища произойдёт повторное удаление уже удалённых объектов со всеми вытекающими. Вот потому-то auto_ptr и выкинули на мороз.
1
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
15.04.2013, 19:47  [ТС]
stima, Три ошибки выдает 50,74,99 строке
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 20:37
Это не ошибки, это вы просто не знакомы с новым стандартом. Замените на обычный for(). Как? Подумайте сами.
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 09:41  [ТС]
stima, Я пробывал менять не чего не полуется,не мучай меня.Зделай пожалуйста чтобы работало
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
21.04.2013, 12:57
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
#include <vector>
#include <iostream>
#include <algorithm>
 
class Room
  {
  friend std::ostream& operator<<(std::ostream&, const Room&);
 
  public:
    Room() {}
    Room(int width, int height, int length, int windows = 0)
      : _width(width), _height(height), _length(length), _windows(windows) {}
 
    int width()   const { return _width; }
    int height()  const { return _height; }
    int length()  const { return _length; }
    int windows() const { return _windows; }
 
    int square()  const { return _width * _length; }
 
  private:
    int _width;
    int _height;
    int _length;
    int _windows;
  };
  
class Flat
  {
  friend std::ostream& operator<<(std::ostream&, const Flat&);
 
  public:
    Flat(int level) : _level(level) {}
 
    Room* add_room(Room* room)
      {
      _rooms.push_back(room);
      return _rooms.back();
      }
    
    Room* add_room(int width, int height, int length)
      {
      _rooms.push_back(new Room(width, height, length));
      return _rooms.back();
      }
 
    void remove_room(Room *room)
      {
      _rooms.erase(std::remove(_rooms.begin(), _rooms.end(), room), 
          _rooms.end());
      }
 
    int rooms_count() const { return _rooms.size(); }
 
  private:
    int _level;
    std::vector<Room*> _rooms;
  };
 
std::ostream& operator<<(std::ostream& out, const Room& room)
  {
    return out << "Room's"
               << " width: "  << room.width()
               << " height: " << room.height()
               << " length: " << room.length();
  }
 
std::ostream& operator<<(std::ostream& out, const Flat& flat)
  {
    out << "Flat's level " << flat._level << std::endl;
    out << "Contains rooms: " << std::endl;
 
    std::vector<Room*>::const_iterator cit = flat._rooms.cbegin();
    for ( ; cit != flat._rooms.end(); ++cit)
      out << **cit << std::endl;
 
    return out;
  }
 
int main()
  {
  std::vector<Room*> other_rooms;
  other_rooms.push_back(new Room(10, 10, 10));
 
  Flat flat(2);
  
  Room *room = flat.add_room(new Room(20, 20, 20));
  other_rooms.push_back(room);
 
  flat.add_room(other_rooms[0]);
 
  std::cout << "My new flat is " << flat << std::endl;
  std::cin.get();
 
  return 0;
  }
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 13:43  [ТС]
stima,2 ошибки вылазят 73 и 97 строка.Сейчас покажу какие.
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 13:44  [ТС]
Вот
Миниатюры
Отношения между классами и объектами  
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 13:47  [ТС]
stima, Я через MinGW Developer Studio делаю мож в этом проблема
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
21.04.2013, 14:55
странно. попробуйте так
C++
1
2
3
std::vector<Room*>::iterator it = flat._rooms.begin();
for ( ; it != flat._rooms.end(); ++it)
      out << **it << std::endl;
а 2 это варнинг, добавьте перенос строки в конец файла.

п.с. А какой там версии gcc?
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 15:49  [ТС]
stima, Тоже не подходит этот вариант. MinGW Developer Studio 2.05 скачан отсюда http://soft.sibnet.ru/soft/107... udio-2-05/ А вы на чем работаете что у вас получается?
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
21.04.2013, 16:37
Я скачал и проверил.

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
#include <vector>
#include <iostream>
#include <algorithm>
 
class Room
  {
  friend std::ostream& operator<<(std::ostream&, const Room&);
 
  public:
    Room() {}
    Room(int width, int height, int length, int windows = 0)
      : _width(width), _height(height), _length(length), _windows(windows) {}
 
    int width()   const { return _width; }
    int height()  const { return _height; }
    int length()  const { return _length; }
    int windows() const { return _windows; }
 
    int square()  const { return _width * _length; }
 
  private:
    int _width;
    int _height;
    int _length;
    int _windows;
  };
  
class Flat
  {
  friend std::ostream& operator<<(std::ostream&, const Flat&);
 
  public:
    Flat(int level) : _level(level) {}
 
    Room* add_room(Room* room)
      {
      _rooms.push_back(room);
      return _rooms.back();
      }
    
    Room* add_room(int width, int height, int length)
      {
      _rooms.push_back(new Room(width, height, length));
      return _rooms.back();
      }
 
    void remove_room(Room *room)
      {
      _rooms.erase(std::remove(_rooms.begin(), _rooms.end(), room), 
          _rooms.end());
      }
 
    int rooms_count() const { return _rooms.size(); }
 
  private:
    int _level;
    std::vector<Room*> _rooms;
  };
 
std::ostream& operator<<(std::ostream& out, const Room& room)
  {
    return out << "Room's"
               << " width: "  << room.width()
               << " height: " << room.height()
               << " length: " << room.length();
  }
 
std::ostream& operator<<(std::ostream& out, const Flat& flat)
  {
    out << "Flat's level " << flat._level << std::endl;
    out << "Contains rooms: " << std::endl;
 
    std::vector<Room*>::const_iterator cit = flat._rooms.begin();
    for ( ; cit != flat._rooms.end(); ++cit)
      out << **cit << std::endl;
 
    return out;
  }
 
int main()
  {
  std::vector<Room*> other_rooms;
  other_rooms.push_back(new Room(10, 10, 10));
 
  Flat flat(2);
  
  Room *room = flat.add_room(new Room(20, 20, 20));
  other_rooms.push_back(room);
 
  flat.add_room(other_rooms[0]);
 
  std::cout << "My new flat is " << flat << std::endl;
  std::cin.get();
 
  return 0;
  }

п.с. Странно но оказывается cbegin, cend это не часть стандарта до C++11.
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 2
21.04.2013, 16:42
Кто сможет решить????
В файле заданы координаты вершин многоугольника. Вывести на экран этот многоугольник. Вокруг каждой вершины, расстояние от которой до одной из смежных не превышает величины, заданной в другом файле, нарисовать круг радиусом, равным половине длинной диагонали многоугольника.Круги, пересекающихся выделить отдельным цветом.
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 16:45  [ТС]
stima, Так и должно быть ?Обычно сам водишь свои значение после :,а не они уже появляются,как в картинке ниже
0
2 / 2 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 16:46  [ТС]
вот
Миниатюры
Отношения между классами и объектами  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2013, 16:46
Помогаю со студенческими работами здесь

Отношения между классами и объектами(вывод по значению)
Пишу прогу, основное уже работает. Нет мыслей только о реализации метода поиска по переменной (функция search в коде(строка 132),поиск по...

Отношения между объектами
можно вопрос? задание: В программе определены предикаты: отец(X,Y); мать(X,Y); мужчина(X); женщина(X); знакомая(X,Y). Определить...

Отношения между классами
Ребята, всем привет!!! Мне очень нужна ваша помощь!!! Необходимо разработать класс Car. Добавить в класс 3 поля: марка автомобиля, цвет...

Работа с классами и объектами
Я полный чайник, изучаю тему классов, и не могу понять, почему не работает данный код Он, компилируется, но при выполнении события...

Работа с классами и объектами
Необходимо вывести на экран перечень стран, у которых: 1) площадь больше или равна введенному пользователем с клавиатуры значению; 2)...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru