通常在C++中,我们看到相同的名称函数,在不同的类中有相同的参数,还有虚拟关键字。是多态性的一个例子吗?如果是的话,如何并有其他方法来理解c++??中的多态性。
发布于 2014-05-04 21:10:01
假设您有以下方案:
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,并且每次迭代该向量以调用每个对象函数foo。通常,您需要两个向量,一个用于类Derived1的对象,另一个用于类Derived2的对象。
现在看看多态是如何拯救我们的。我们可以将对象Derived1和Derived2的地址存储为指向Base对象的指针,然后将这些指针存储在std::vector<Base*> v中。现在,每次我们迭代指针的向量并调用成员函数foo (例如,for(auto base : v) base->foo())时,都会为每个对象调用正确的foo函数。这是多态的许多方面之一,称为上浇铸。
我希望上面的运行时多态示例为您提供了一个线索,说明虚拟函数和函数重写是如何与继承和多态相关的。
更新:
模板是编译时多态的一种形式,请看一下这个问题模板和多态之间有什么区别?。
https://stackoverflow.com/questions/23461223
复制相似问题