Я хотел бы получить вектор/список указателей производных классов (один из которых соответствует каждому производному классу из абстрактного базового класса), учитывая имя базового класса, например.Как заполнить вектор/список всеми производными классами базового класса
ответ
Так делать именно то, что вам кажется, хочет сделать
#include <list>
class BaseObject { };
class Dinosaur : public BaseObject { };
class Hammer : public BaseObject { };
void
myFunction() {
std::list<BaseObject*> myList;
myList.push_back(new Dinosaur());
myList.push_back(new Hammer());
}
Обратите внимание, что объекты в списке не бесплатно сами по себе, когда список будет уничтожен. Либо вы должны делать вручную (Перебор списка и вызова удалить), либо смотреть на что-то немного сложным, если вы C++ новичок, auto_ptr и волшебный мир умных указателей ^^
Спасибо за ответ. Да, это действительно очевидное решение, но я надеялся, что есть способ избежать необходимости заполнить список сам, используя некоторые функции времени выполнения компилятора C++, возможно? –
@ user545591: такой функции нет. –
Философия C++ заключается в том, чтобы делать наименее возможные вещи за сценой во время выполнения! Более динамичным, за-сценой-временем исполнения-магии может быть Objective C. Или если вы хотите в полной мере действовать в этом направлении, Python, Ruby, Lisp ... – Monkey
Вы не можете получить указатель на класс. Класс - это просто спецификация объекта. У вас есть только что указать, как только объект создается, создавая экземпляр класса.
Если у вас есть следующие классы:
class FooBase {};
class DerivedFoo : public FooBase {};
class MoreDerivedFoo : public DerivedFoo {};
вы можете создать объект типа MoreDerivedFoo
и указывают на него, используя указатель любого из этих типов.
MoreDerivedFoo mdf = new MoreDerivedFoo();
FooBase* p1 = &mdf;
DerivedFoo* p2 = &mdf;
MoreDerivedFoo* p3 = &mdf;
Очевидно, что каждый из этих указателей будет содержать тот же адрес памяти.
@Cooper: Не совсем то, на что я надеялся. Но из ответов ниже я понял, что это не так тривиально. Поэтому, пожалуйста, игнорируйте пока. –
- 1. Как разрешить наследование абстрактного базового класса с несколькими производными классами
- 2. Каков наилучший способ разграничения между производными классами базового класса?
- 3. Методы базового класса, которые будут использоваться всеми производными классами, кроме одного
- 4. Вызов функции-члены базового класса с несколькими производными классами
- 5. Может ли Django pre_save работать со всеми производными классами
- 6. Где определить функторы, используемые многими производными классами?
- 7. C++ шаблоны с производными классами
- 8. C++ Проблемы с производными классами
- 9. Ковариация с производными классами в C#
- 10. Оператор присваивания C++ = перегрузка с производными классами
- 11. Работа с производными классами как JSON
- 12. Ускоренный способ создания и инициализации объекта базового класса с производными классами
- 13. Перегрузки функции с производными классами
- 14. литье между двумя производными классами
- 15. C++: «специализация» шаблона функции-члена для работы с производными классами из определенного базового класса
- 16. C++ Шаблон ограничен базовым классом и его производными классами
- 17. Как использовать интерфейс между классами и производными классами?
- 18. C# foreach поведение с производными классами?
- 19. Sharing реализация метода между двумя производными классами
- 20. Выполнение виртуальной функции при вызове производными классами?
- 21. Избегание повторного кода с производными классами C++
- 22. Инициализация базового класса с параметрами, сгенерированными производными [C++]
- 23. Как передать элемент между производными классами признака в Scala?
- 24. Перегрузка операторов C++ между несколькими производными классами
- 25. Создается ли конструктор и деструктор базового класса с производными?
- 26. Переключение между производными классами в C++
- 27. Virtual Наследование - база совместно с другими производными классами
- 28. Как я могу создать словарь в корневом классе, который будет использоваться всеми производными классами?
- 29. Оператор преобразования между шаблонами, производными классами
- 30. XMLPull - Split разбор узла между базовым классом и производными классами
Вы хотите получить вектор производных указателей от * what input *? – Jon
Этот вопрос не отвечает в данной форме. –
Вы спрашиваете, с учетом объекта, список указателей на различные уровни вывода класса этого объекта? то есть. Foo *, DerivedFoo *, MoreDerivedFoo *. Обратите внимание, что все эти указатели будут иметь одинаковое значение. –