C++ переопределение виртуальной функции
Прочёл что при создании virtual void foo(){};
даст возможность переопределять функции в дочерних классах, но этого не случается
GameObject.hpp
#pragma once
#include "SFML/Graphics.hpp"
namespace snake{
class GameObject : public sf::RectangleShape{
public:
GameObject();
std::string name;
virtual void logic();
void setObjectTexture(std::string texturePath);
private:
sf::Texture *textureObject;
void setup();
};
}
Его логика
void GameObject::logic(){
std::cout << "old logic" << std::endl;
}
Button.hpp
#pragma once
#include "Snake/GameObject.hpp"
#include "iostream"
namespace Ui{
class Button : public virtual snake::GameObject{
public:
void logic();
private:
void setup();
};
}
Его логика
void Button::logic() {
std::cout << "new logic" << std::endl;
}
Однако при вызове функции из другого класса(Объект класса Button уже лежит в векторе gameObjects)
void Scene::logicObjects(){
for (int i = 0; i != gameObjects.size(); i++)
gameObjects[i].logic();
}
Я вижу вывод в консоль old logic, хотя казалось бы, переопределил функцию. Что пошло не так и почему не срабатывает переопределение функции?
Источник: Stack Overflow на русском