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

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

15.04.2013, 15:42. Показов 8006. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru