Я думаю, именно поэтому я редко использую в своей повседневной работе объектно-ориентированное программирование, как я его изучал в школе;) Я использую наследие, но не смешиваю классы матери и дочери в одних контейнерах (и я использую шаблоны для многих интерфейсов).

я есть два класса:

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, чтобы он работал, или есть другой способ вызова производных функций?

Заранее спасибо - Сеймор

Ответы на вопрос(2)

Ваш ответ на вопрос