У меня есть несколько классов, ObjDef
, PeopDef
, NpcDef
и PlyDef
, так что PlyDef
и NpcDef
каждый по отдельности наследуют PeopDef
и PeopDef
наследуемого ObjDef. Каждый класс имеет функциональность, которая строится на классе перед ним, поэтому важно, чтобы PeopDef::Tick
вызывается до ObjDef::Tick
. У меня есть каждый объект, хранящийся в vector<ObjDef> object
, но когда идет цикл основного галочка, я хочу, чтобы они вызывали исходные классы «Tick», а не ObjDef::Tick
, что и делает сейчас vector<ObjDef>
. Есть ли способ сделать это, или у меня должен быть отдельный вектор для каждого класса?Как я могу наследовать несколько унаследованных классов в одном массиве?
ответ
Вы можете сохранить указатель ObjDef (ObjDef * или умный указатель) в векторе и сделать метод Tick виртуальным.
Вот пример:
#include <iostream>
#include <vector>
#include <memory>
class ObjDef
{
public:
virtual void Tick()
{
std::cout << "ObjDef::Tick\n";
}
};
class PeopDef : public ObjDef
{
public:
virtual void Tick()
{
std::cout << "PeopDef::Tick\n";
}
};
int main()
{
std::vector<std::shared_ptr<ObjDef>> objects;
std::shared_ptr<ObjDef> obj(new ObjDef());
std::shared_ptr<ObjDef> peop(new PeopDef());
objects.push_back(obj);
objects.push_back(peop);
for (auto object : objects)
{
object->Tick();
}
return 0;
}
В зависимости от времени жизни объекта и управления памятью может быть лучше использовать 'std :: shared_ptr
Создание общих функций, таких как ':: Init' и' :: Tick', ничего не изменило, оно все еще использовало функции 'ObjDef'. Изменение 'vector
Мне нужно будет увидеть больше кода, чтобы узнать, что эти ошибки, но я добавил быстрый пример. –
- 1. Как наследовать несколько классов в объекте C?
- 2. Где я могу хранить несколько NSMutableArray в одном массиве?
- 3. Вектор унаследованных классов
- 4. Как наследовать свойства двух классов в одном классе?
- 5. Состав Унаследованных классов
- 6. Как я могу наследовать страницу?
- 7. Неожиданное преобразование унаследованных классов
- 8. Как я могу наследовать словарь?
- 9. Несколько классов в одном div
- 10. Кастинг для унаследованных классов?
- 11. OOP: Нормально ли иметь много унаследованных классов?
- 12. Несколько переменных в одном массиве?
- 13. Как я могу сделать несколько классов наследуемыми от определенного?
- 14. Classcast исключение для унаследованных классов
- 15. definstances синтаксис унаследованных классов CLIPS
- 16. Spring MVC Проверка унаследованных классов
- 17. Слушайте конкретные события унаследованных классов
- 18. Как использовать объекты разных классов в одном массиве? (Java)
- 19. vb.net - Агрегирование объектов унаследованных классов
- 20. Наследовать от двух классов в объекте C
- 21. Как я могу подсчитать количество повторений значений в одном массиве?
- 22. Как я могу наследовать состояние StatefulWidget?
- 23. Как наследовать от двух классов
- 24. Наследовать от двух классов
- 25. Неверная копия из унаследованных классов
- 26. Переопределение унаследованных поля классов домена
- 27. Невозможно создать коллекцию унаследованных классов
- 28. Проектирование некоторых унаследованных классов SQL?
- 29. C++ Полиморфизм - Карта унаследованных классов
- 30. Несколько классов в одном окне eclipse
Он должен работать правильно, если 'Tick' является виртуальным. –
Не верно, он будет работать, только если его виртуальный * и * вектор сохраняет указатели или ссылки вместо конкретных объектов. – japreiss
Вы должны начать [здесь] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). – molbdnilo