наследование — хранение экземпляров производного класса в Stack Overflow

Я видел, что многие люди используют new создавать экземпляры производных классов, а затем они сохраняют указатель на базу в некотором контейнере. Имеет ли это какое-либо преимущество в отношении использования контейнера для каждого производного класса?
Под этим я подразумевал что-то вроде следующего

class A
{
public:
vector<Base*> bases;
set<Derived1> der1;
set<Derived2> der2;
//other stuff
};

Редактировать: убрал вторую часть вопроса и добавил как комментарий.

1

Решение

Если вы делаете следующее

vector<base*> bases;

Затем вы можете использовать полиморфизм на ваших объектах.
Представьте, что у вас есть базовый класс по имени ГИБУЛЕ. У него есть метод move () для перехода из точки А в точку Б.

class Vehicule
{
public:
virtual void move(){}
}

Тогда у вас есть два производных класса: автомобиль и подводная лодка

class Car : public Vehicule
{
public:
void move()
{
checktires();
drive();
}
}

И ваш подкласс

class Submarine : public Vehicule
{
public:
void move()
{
submersion();
propulsion();
}
}

Поскольку метод перемещения является виртуальным, вы будете выполнять полиморфизм. Это механизм, который позволяет вам вызывать одну и ту же функцию, но с разным поведением, основанным на динамическом типе ваших объектов.

Я постараюсь объяснить это предложение как можно лучше.
Теперь, когда у вас есть классы GTULE, Car и Submarine, вы создадите массив (или STL-контейнеры, такие как вектор) указателей GTULE.

std::vector<Vehicule*> objects;
objects.push_back(new Car());
objects.push_back(new Submarine());
objects[0]->move();
objects[1]->move();

Первый вызов move будет вызывать метод move, определенный в методе Car. А второй назовет ход, определенный на подводной лодке. Потому что у вас может быть вектор из GTule *, но когда вы вызываете функцию и она является виртуальной, вы вызываете соответствующую версию. И, вызывая только одну функцию, вы ведете себя по-разному.
Вы можете добавить как можно больше производных классов из GTule, вам просто нужно адаптировать метод перемещения.

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

Извините за ошибки, я не являюсь носителем английского языка.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]