Страница 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 животных.