首先要明确什么是多态:
多态就是一个名字或符号具有多种含义,通过重载来实现。有函数重载和运算符重载两种。
编译是静态的,函数重载是静态多态性的具体示例,代码在编译完就已经决定出同一个接口用哪种实现,这就是编译期多态。
运行时多态的,虚函数是动态多态性的具体示例。直到程序运行时,拿到CPU寄存器里的指针了,才知道这个指针究竟指向父类还是继承类的虚函数实现,这就是运行期的多态了。
也就是说,普通的成员函数,在编译时调用关系就已经确定了,而虚函数,需要在运行时,才能根据对象指针指向的是父类还是继承类,来决定调用哪一个实现,我们看看下面的类定义:
class father
virtual testVfunc(){
std::cout<<"father testVfunc run"<<std::endl;
class child : public father
virtual testVfunc(){
std::cout<<"child testVfunc run"<<std::endl;
定义两个对象:father pFather=new father();
child pChild=new child();这两个对象在内存中
有一个vptl指针,分别指向自己实现的函数,这样程序在运行到虚函数时,就会查找这个指针具体指向的地址空间,执行自己的实现函数。
注,泛型是一种特殊形式的静态多态,实现方式是类型参数化。使用模板机制的程序设计就是泛型编程。