【问题标题】:In c++, are the virtual function, function overriding and polymorphism related with each other? [closed]在c++中,虚函数、函数覆盖和多态是相互关联的吗? [关闭]
【发布时间】:2014-05-04 20:30:41
【问题描述】:

通常在 C++ 中,我们会在不同的类中看到具有相同参数的同名函数以及 virtual 关键字。 这是多态的一个例子吗?如果是,如何以及还有其他方法可以理解 c++ 中的多态性吗??

【问题讨论】:

  • 您是指亚型多态性吗?重载和模板是 C++ 中多态的另外两个例子。
  • 也许这个link可以帮助你
  • @rightfold:不,不是任何特定类型的多态性。我只想知道函数覆盖或虚函数与多态的关系是什么?而且你再给两个,我们怎么能称之为多态的重载和模板示例?

标签: c++ function polymorphism overriding virtual-functions


【解决方案1】:

假设你有以下方案:

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,并且每次您遍历向量以调用其每个对象函数@987654327 @。通常,您需要两个向量,一个用于Derived1 类的对象,另一个用于Derived2 类的对象。

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

希望上面运行时多态的例子能给你一个线索,关于虚函数和函数覆盖与继承和多态的关系。

更新:

模板是编译时多态性的一种形式,看看这个 SO question what is the difference between templates and polymorphism

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2015-06-17
    • 1970-01-01
    • 2012-10-05
    • 2020-08-21
    • 1970-01-01
    相关资源
    最近更新 更多