Страница 1 из 1

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

Добавлено: 10 апр 2018, 20:34
anastasiya.nimchenko
Задание:
1. Реализовать интерфейс животное.
2. Описать 5 классов животных наследующих интерфейс.
3. Реализовать класс Вольер.
4. Сделать еще один класс А, в котором должны быть 2 поля:
• массив интерфейсов животных (10 элементов в массиве по 2 одинаковых);
• массив из 5 вольеров.
5. В классе А сделать метод, который будет расселять 10 животных в 5 вольеров по парам.

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

Добавлено: 11 апр 2018, 11:22
Romeo
Готов помочь. Что именно не получается?

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

Добавлено: 11 апр 2018, 16:27
anastasiya.nimchenko
Romeo писал(а):Готов помочь. Что именно не получается?
Не знаю как поместить данные про двух животных разного пола в одну ячейку массива Вольер

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

Добавлено: 11 апр 2018, 17:28
Romeo
Видимо, вольер должен содержать массив указателей животных, которые в нём живут. Именно указателей. Владельцем всех животных и всех вольеров будет класс А, там все эти объекты будут храниться по значению. Вольер же будет содержать массив указателей, причём указатели должны быть на базовый интерфейс, чтобы в вольер можно было поселить животное любого вида и любого пола.

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

Добавлено: 11 апр 2018, 17:31
anastasiya.nimchenko
Romeo писал(а):Видимо, вольер должен содержать массив указателей животных, которые в нём живут. Именно указателей. Владельцем всех животных и всех вольеров будет класс А, там все эти объекты будут храниться по значению. Вольер же будет содержать массив указателей, причём указатели должны быть на базовый интерфейс, чтобы в вольер можно было поселить животное любого вида и любого пола.
вопрос все тот же: как поместить, теперь уже, два указателя в один вольер?

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

Добавлено: 11 апр 2018, 19:39
Слива
Romeo писал(а):Видимо, вольер должен содержать массив указателей животных,
- сделать двухмерный массив - строки - это вольеры, столбцы(2) - это животных.

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

Добавлено: 11 апр 2018, 19:43
anastasiya.nimchenko
Можно хоть примерный пример реализации в коде.
В теории все слишком непонятно.

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

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

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

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

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

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

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

Добавлено: 11 апр 2018, 22:01
Absurd
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;
};

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

Добавлено: 11 апр 2018, 22:58
Romeo
Нет. 10 животных и 5 вольеров. Метод в классе А должен расселить эти 10 животных по 5 вольерам, то есть в каждый вольер попадает 2 животных.