多态性是面向对象设计语言的基本特征,而C++中正是通过虚函数来实现多态的。
关于多态:多态也称为动态联编或迟后联编,因为到底调用哪一个函数,在编译时不能确定,而要推迟到运行时确定。也就是说,要等到程序运行时,确定了指针所指向的对象的类型时(或者是引用时),才能够确定。这样的解释可能还是有点抽象,请看下面的例子:
#include <iostream> using namespace std; class Base { public: void show() { cout<<"这是基类的show()/n"; } }; class My : public Base { public: void show() { cout<<"这是继承类的show()/n"; } }; void test(Base &temp) { temp.show(); } int main() { Base base; My my; test(base); test(my); system("pause"); return 0; }
运行结果:
当调用上面的这个test()函数时,如何确定temp类型(基类还是派生类)然后调用正确的show()方法呢?-------使用虚函数
我们在基类的show()函数前加上virtual,如下代码:
class Base { public: virtual void show() { cout<<"这是基类的show()/n"; } };
再看看运行结果:
这次程序就根据传入对象的类型调用了正确的show()函数了。