2013-07-12 3 views
0

Я создаю игру на 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; 
    } 
} 
+0

Болл не унаследовав от экземпляра – Emilcasvi

+0

Вам не нужно объявлять переменные в Болл, если Болл наследуется от Instance. Вы должны объявить класс Ball как производный класс экземпляра, хотя в его объявлении класса IE class Ball: public Instance. – Egg

+0

Возможно, вы также захотите, чтобы обновление было чисто виртуальным. 'virtual void update() = 0;' – apartridge

ответ

0

переобъявить мяч в следующем

class Ball : public Instance { 
    public: 
    void update() { 
     x += 1; 
    } 
} 

Поставив «: общественное Instance» вы делаете шар будучи производным классом Instance и имеют тот же общественный или защищенный атрибутов, он будет иметь глубину, x и y, не объявляя их явно.

http://www.learncpp.com/cpp-tutorial/112-basic-inheritance-in-c/

+0

Если вы снова посмотрите на код, я хотел бы добавить это, но я забыл. –

+0

Это сработало? или вы все еще получаете ошибки – Emilcasvi

+0

Это действительно сработало, удалив повторяющиеся объявления переменных. Благодарю. –

Смежные вопросы