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

标签 c++ function polymorphism overriding virtual-functions

<分区>

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

最佳答案

假设您有以下方案:

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; }
};

现在假设您要存储 Derived1 的对象和 Derived2在一个容器中,假设一个 std::vector每次您遍历 vector 以调用其每个对象函数时 foo .通常,您需要两个 vector ,一个用于 Derived1 类的对象另一个用于 Derived2 类的对象.

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

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

更新:

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

关于c++ - 在c++中,虚函数、函数覆盖和多态性是否相互关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23461223/

相关文章:

c++ - 接收用户所属的所有成员组的 SID?

javascript - JS - 让功能重复直到满足条件

java - Java 中的动态方法调度

list - 在 Common Lisp 的 2 个列表中递归应用函数

rust - Rust 中的 "Subclassing"特征

c++ - 多态性如何涉及多重继承?

c++ - 试图在 C++ 中重载增量运算符

c++ - 分离类成员声明和初始化的正确方法

c++ - 支持逗号和错误信息的自定义 `assert`宏

javascript - 函数需要改进,应该返回一个 _ 和一个数字(不管有多长)