我有一个类Object
和一些派生类,例如 class Bird : public Object
.函数Object::Render
和 Bird::Render
被定义和实现。 (事实上,Bird::Render
调用了 Object::Render
)
我还有一个 vector<Object*>
它拿着一堆 Bird*
秒。现在,在未来,这个 vector 还将包含其他类型的对象。
我的问题是:在不知道该 vector 元素类型的情况下,是否可以执行其特定的 Render
功能,即可以
vector<Object*> objects;
object.push_back(new Bird());
// ...
objects[i]->Render(); // This should execute Bird::Render
据我所知,最后一行只执行Object::Render
(这是有道理的,至于调用函数,这是一个普通的 Object
)。
有什么办法可以改变吗?
最佳答案
Object::Render
应该是 virtual function
并且 Bird
应该覆盖 Render
函数。
class Object
{
public:
virtual ~Object() {}
virtual void Render() = 0;
};
void Object::Render() {}
class Bird : public Object
{
public:
void Render() { Object::Render(); }
};
vector<Object*> objects;
objects.push_back(new Bird());
objects[0]->Render();
关于c++ - 覆盖继承的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700747/