<分区>
通常在 C++ 中,我们会在不同的类中看到具有相同参数的同名函数以及 virtual 关键字。 是多态的例子吗?如果是,如何以及是否有任何其他方式来理解 C++ 中的多态性??
<分区>
通常在 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
类的对象.
现在看看多态性是如何拯救我们的。我们可以存储对象的地址 Derived1
和 Derived2
作为指向 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/