首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中,虚拟函数、函数覆盖和多态是否相互关联?

在c++中,虚拟函数、函数覆盖和多态是否相互关联?
EN

Stack Overflow用户
提问于 2014-05-04 20:30:41
回答 1查看 85关注 0票数 0

通常在C++中,我们看到相同的名称函数,在不同的类中有相同的参数,还有虚拟关键字。是多态性的一个例子吗?如果是的话,如何并有其他方法来理解c++??中的多态性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-04 21:10:01

假设您有以下方案:

代码语言:javascript
复制
class Base {
  public:
    virtual int foo() = 0;
};

class Derived1 : public Base {
  public:
    virtual int foo() { return 1; }
};

class Derived2 : public Base {
  public:
    virtual int foo() { return 2; }
};

现在,假设您希望将Derived1Derived2的对象存储在容器中,让我们假设是一个std::vector,并且每次迭代该向量以调用每个对象函数foo。通常,您需要两个向量,一个用于类Derived1的对象,另一个用于类Derived2的对象。

现在看看多态是如何拯救我们的。我们可以将对象Derived1Derived2的地址存储为指向Base对象的指针,然后将这些指针存储在std::vector<Base*> v中。现在,每次我们迭代指针的向量并调用成员函数foo (例如,for(auto base : v) base->foo())时,都会为每个对象调用正确的foo函数。这是多态的许多方面之一,称为上浇铸

我希望上面的运行时多态示例为您提供了一个线索,说明虚拟函数和函数重写是如何与继承和多态相关的。

更新:

模板是编译时多态的一种形式,请看一下这个问题模板和多态之间有什么区别?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23461223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档