Я создаю игру на C++, со всеми объектными классами, связанными с одним базовым классом, Instance
, и все они перечислены в vector
. Я должен иметь доступ к обеим переменным и функциям из указателей в векторе. Вот мой код для активации каждого способа обновления каждого экземпляра:Переменные и функции полиморфного класса C++
for (double j = 1000; j >= -1000; j -= 1) {
for (int i = 0; i < instances.size(); i += 1) {
if (instances[i]->depth == j) {
instances[i]->update();
}
}
}
я могу получить доступ к функциям и выполнять их, а отдельные экземпляры могут получить доступ к своим собственным функциям, но я не могу получить доступ к экземплярам через instances[i]->whatevervariable
, и кажется, взять значение переменной из базового класса. Использование dynamic_casts
не помогло бы, так как я пытаюсь сделать игру очень гибкой. Так как я могу установить
std::vector<Instances*> instances;
так что позволяет мне получить доступ к обоим переменным и функциям через instances[i]->
?
Классы:
class Instance {
public:
double x;
double y;
double depth;
virtual void update() { };
};
class Ball : public Instance {
public:
double x;
double y;
double depth;
void update() {
x += 1;
}
}
Болл не унаследовав от экземпляра – Emilcasvi
Вам не нужно объявлять переменные в Болл, если Болл наследуется от Instance. Вы должны объявить класс Ball как производный класс экземпляра, хотя в его объявлении класса IE class Ball: public Instance. – Egg
Возможно, вы также захотите, чтобы обновление было чисто виртуальным. 'virtual void update() = 0;' – apartridge