c++ - 覆盖继承的函数

标签 c++ oop

我有一个类Object和一些派生类,例如 class Bird : public Object .函数Object::RenderBird::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/

相关文章:

c++ - 在 Debug模式下运行时 VS2012 中的命令参数错误

c++ - Windows MSVS 2017 上的 boost::stacktrace

oop - 实体是否应该有行为?

oop - 封装的反义词是什么?

c# - C#中的委托(delegate)和继承

c++ - 有符号整数溢出未定义行为

c++ - Visual Studio下CMake构建问题

c++ - 这段代码是如何工作的?

java - Java 类的公共(public)父类(super class)型

language-agnostic - 您在类中允许的最大方法的限制 N 是多少?