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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
15.04.2013, 15:42     Отношения между классами и объектами #1
Для каждого индивидуального варианта необходимо создать консольную программу на С++, реализующую отношение ассоциации (агрегации или композиции) между классами и объектами.
Класс «КОМНАТА», содержит закрытые поля: сведения о метраже, высоте потолков и количестве окон и метод подсчета площади комнаты. Класс «КВАРТИРА», содержит закрытые поля: номер этажа, массив объектов класса «КОМНАТА», метод подсчета площади квартиры и метод вывода информации о комнатах квартиры.
За ранее спосибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 15:42     Отношения между классами и объектами
Посмотрите здесь:

C++ Взаимодействие между объектами единой иерархии классов
Сообщения между объектами C++
Как работает ссылка с объектами, классами и перегруженным оператором [] C++
C++ Организация общения между классами
C++ OOP (все принципы ООП и основные отношения между классами)
C++ Типы связей между объектами
Реализация отношений между объектами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
15.04.2013, 16:33     Отношения между классами и объектами #2
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;
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
15.04.2013, 16:53  [ТС]     Отношения между классами и объектами #3
stima, А как программа начинается например #include <iomanip>,мне на C++ надо написать.Заранее спосибо
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
15.04.2013, 18:42     Отношения между классами и объектами #4
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;
  }
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.04.2013, 19:00     Отношения между классами и объектами #5
Цитата Сообщение от stima Посмотреть сообщение
std::vector<std::auto_ptr<Room*> > rooms;
auto_ptr в контейнере - верный способ выстрелить себе в ногу - это раз.
auto_ptr - deprecated - это два.
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
15.04.2013, 19:41     Отношения между классами и объектами #6
Неумение думать это верный способ выстрелить себе в ногу. Это агрегация, а значит, если с контейнера будет убран объект, то владение теряется! Так, что в этом случае мне все равно на лимитацию STL.

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

Добавлено через 7 минут
п.с.с.
Ошибся). Это композиция и владеть обьектом никто кроме контейнера не должен.
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
15.04.2013, 19:43     Отношения между классами и объектами #7
auto_ptr в векторе означает, что на каждом изменении размера внутреннего хранилища все объекты, указатели на которые хранились в контейнере, будут уничтожены, а сами указатели станут висячими. При следующем изменении размеров хранилища произойдёт повторное удаление уже удалённых объектов со всеми вытекающими. Вот потому-то auto_ptr и выкинули на мороз.
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
15.04.2013, 19:47  [ТС]     Отношения между классами и объектами #8
stima, Три ошибки выдает 50,74,99 строке
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
15.04.2013, 20:37     Отношения между классами и объектами #9
Это не ошибки, это вы просто не знакомы с новым стандартом. Замените на обычный for(). Как? Подумайте сами.
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 09:41  [ТС]     Отношения между классами и объектами #10
stima, Я пробывал менять не чего не полуется,не мучай меня.Зделай пожалуйста чтобы работало
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
21.04.2013, 12:57     Отношения между классами и объектами #11
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;
  }
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 13:43  [ТС]     Отношения между классами и объектами #12
stima,2 ошибки вылазят 73 и 97 строка.Сейчас покажу какие.
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 13:44  [ТС]     Отношения между классами и объектами #13
Вот
Миниатюры
Отношения между классами и объектами  
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 13:47  [ТС]     Отношения между классами и объектами #14
stima, Я через MinGW Developer Studio делаю мож в этом проблема
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
21.04.2013, 14:55     Отношения между классами и объектами #15
странно. попробуйте так
C++
1
2
3
std::vector<Room*>::iterator it = flat._rooms.begin();
for ( ; it != flat._rooms.end(); ++it)
      out << **it << std::endl;
а 2 это варнинг, добавьте перенос строки в конец файла.

п.с. А какой там версии gcc?
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 15:49  [ТС]     Отношения между классами и объектами #16
stima, Тоже не подходит этот вариант. MinGW Developer Studio 2.05 скачан отсюда http://soft.sibnet.ru/soft/10761-min...r-studio-2-05/ А вы на чем работаете что у вас получается?
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
21.04.2013, 16:37     Отношения между классами и объектами #17
Я скачал и проверил.

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.
Student004
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 2
21.04.2013, 16:42     Отношения между классами и объектами #18
Кто сможет решить????
В файле заданы координаты вершин многоугольника. Вывести на экран этот многоугольник. Вокруг каждой вершины, расстояние от которой до одной из смежных не превышает величины, заданной в другом файле, нарисовать круг радиусом, равным половине длинной диагонали многоугольника.Круги, пересекающихся выделить отдельным цветом.
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 16:45  [ТС]     Отношения между классами и объектами #19
stima, Так и должно быть ?Обычно сам водишь свои значение после :,а не они уже появляются,как в картинке ниже
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 16:46     Отношения между классами и объектами
Еще ссылки по теме:

Передача данных между классами C++
C++ Взаимодействие между классами
Задача на тему робота с классами и объектами в С++ C++
Связь между 2 классами C++
C++ Сравнение между объектами разных классов

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

Или воспользуйтесь поиском по форуму:
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
21.04.2013, 16:46  [ТС]     Отношения между классами и объектами #20
вот
Миниатюры
Отношения между классами и объектами  
Yandex
Объявления
21.04.2013, 16:46     Отношения между классами и объектами
Ответ Создать тему
Опции темы

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