Наследование и реализация элементов класса

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
anastasiya.nimchenko
Сообщения: 4
Зарегистрирован: 10 апр 2018, 20:31

10 апр 2018, 20:34

Задание:
1. Реализовать интерфейс животное.
2. Описать 5 классов животных наследующих интерфейс.
3. Реализовать класс Вольер.
4. Сделать еще один класс А, в котором должны быть 2 поля:
• массив интерфейсов животных (10 элементов в массиве по 2 одинаковых);
• массив из 5 вольеров.
5. В классе А сделать метод, который будет расселять 10 животных в 5 вольеров по парам.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

11 апр 2018, 11:22

Готов помочь. Что именно не получается?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
anastasiya.nimchenko
Сообщения: 4
Зарегистрирован: 10 апр 2018, 20:31

11 апр 2018, 16:27

Romeo писал(а):Готов помочь. Что именно не получается?
Не знаю как поместить данные про двух животных разного пола в одну ячейку массива Вольер
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

11 апр 2018, 17:28

Видимо, вольер должен содержать массив указателей животных, которые в нём живут. Именно указателей. Владельцем всех животных и всех вольеров будет класс А, там все эти объекты будут храниться по значению. Вольер же будет содержать массив указателей, причём указатели должны быть на базовый интерфейс, чтобы в вольер можно было поселить животное любого вида и любого пола.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
anastasiya.nimchenko
Сообщения: 4
Зарегистрирован: 10 апр 2018, 20:31

11 апр 2018, 17:31

Romeo писал(а):Видимо, вольер должен содержать массив указателей животных, которые в нём живут. Именно указателей. Владельцем всех животных и всех вольеров будет класс А, там все эти объекты будут храниться по значению. Вольер же будет содержать массив указателей, причём указатели должны быть на базовый интерфейс, чтобы в вольер можно было поселить животное любого вида и любого пола.
вопрос все тот же: как поместить, теперь уже, два указателя в один вольер?
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

11 апр 2018, 19:39

Romeo писал(а):Видимо, вольер должен содержать массив указателей животных,
- сделать двухмерный массив - строки - это вольеры, столбцы(2) - это животных.
anastasiya.nimchenko
Сообщения: 4
Зарегистрирован: 10 апр 2018, 20:31

11 апр 2018, 19:43

Можно хоть примерный пример реализации в коде.
В теории все слишком непонятно.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

11 апр 2018, 20:03

Слива писал(а):- можно еще структурой сделать.
В данном случае можно и структурой, но в общем случае вольер может содержать не ровно два животных, так что я бы сразу обобщил.
anastasiya.nimchenko писал(а):Можно хоть примерный пример реализации в коде.
В теории все слишком непонятно.
Массив указателей на животных можно реализовать через вектор.

Код: Выделить всё

class Aviary
{
   Aviary();
   ~Aviary();

   void AddAnimal(IAnimal* animal)
   {
      m_animals.push_back(animal);
   }

private:
   std::vector<IAnimal*> m_animals;
};
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

11 апр 2018, 22:01

Romeo писал(а):В данном случае можно и структурой, но в общем случае вольер может содержать не ровно два животных, так что я бы сразу обобщил.

Массив указателей на животных можно реализовать через вектор.

Код: Выделить всё

class Aviary
{
   Aviary();
   ~Aviary();

   void AddAnimal(IAnimal* animal)
   {
      m_animals.push_back(animal);
   }

private:
   std::vector<IAnimal*> m_animals;
};

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

Код: Выделить всё

class Stall
{
   Stall(unsigned capacity):
   :m_cells(capacity)
   {}
   ~Stall();

   void AddAnimal(IAnimal* animal) {
     for (auto& cell: m_cells) {
       if (cell.first && !cell.second && typeid(*cell.first) == typeid(animal) && ... compare sexes ...) {
          cell.second = animal;
          break;
       }
       if (!cell.second && ... ) {
       }
     }
   }

private:
   std::vector< std: :p air< IAnimal*,  IAnimal*> > m_cells;
};
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

11 апр 2018, 22:58

Нет. 10 животных и 5 вольеров. Метод в классе А должен расселить эти 10 животных по 5 вольерам, то есть в каждый вольер попадает 2 животных.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить