的多态如何在编译和运行期实现

更新时间:01-25 教程 由 冷瞳 分享

的多态如何在编译和运行期实现?

首先要明确什么是多态:

多态就是一个名字或符号具有多种含义,通过重载来实现。有函数重载和运算符重载两种。

编译是静态的,函数重载是静态多态性的具体示例,代码在编译完就已经决定出同一个接口用哪种实现,这就是编译期多态。

运行时多态的,虚函数是动态多态性的具体示例。直到程序运行时,拿到CPU寄存器里的指针了,才知道这个指针究竟指向父类还是继承类的虚函数实现,这就是运行期的多态了。

也就是说,普通的成员函数,在编译时调用关系就已经确定了,而虚函数,需要在运行时,才能根据对象指针指向的是父类还是继承类,来决定调用哪一个实现,我们看看下面的类定义:

class father

{

virtual testVfunc(){

std::cout<<"father testVfunc run"<

}

}

class child : public father

{

virtual testVfunc(){

std::cout<<"child testVfunc run"<

}

定义两个对象:father pFather=new father();

child pChild=new child();这两个对象在内存中

有一个vptl指针,分别指向自己实现的函数,这样程序在运行到虚函数时,就会查找这个指针具体指向的地址空间,执行自己的实现函数。

注,泛型是一种特殊形式的静态多态,实现方式是类型参数化。使用模板机制的程序设计就是泛型编程。

声明:关于《的多态如何在编译和运行期实现》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2194984.html