Я думаю, именно поэтому я редко использую в своей повседневной работе объектно-ориентированное программирование, как я его изучал в школе;) Я использую наследие, но не смешиваю классы матери и дочери в одних контейнерах (и я использую шаблоны для многих интерфейсов).
я есть два класса:
class Object {
public:
Object();
virtual void update();
virtual void draw();
private:
protected:
int x, y, tick;
}
а также
class Unit : public Object {
public:
Unit();
void update();
private:
protected:
}
Затем я определяю конструкторы и функции в отдельных файлах .cpp.
Вот определения для объекта:
Object::Object() {
x = y = 0;
};
Object::update() {
tick ++;
};
Object::draw() {
// All my draw code is in here.
};
И блок:
Unit::Unit() : Object() {
};
Unit::update() {
Object::update();
// Then there's a bunch of movement related code here.
};
Все отлично работает индивидуально, но я сталкиваюсь с проблемой при попытке вызвать функции из вектора.
vector<Object> objects;
Затем я делаю это в моем пустом main ():
for (int i = 0; i < objects.size(); i ++) {
objects[i].update();
objects[i].draw();
};
Это рисует все нормально, но вызывает только версию объекта update (), а не версию, определенную производным классом. Нужно ли создавать вектор для каждого типа, который я наследую от класса Object, чтобы он работал, или есть другой способ вызова производных функций?
Заранее спасибо - Сеймор