Skip to main content
 首页 » 操作系统 » linux系统

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

2021年10月14日100百度已收录

首先要明确什么是多态:

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

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

运行时多态的,虚函数是动态多态性的具体示例。直到程序运行时,拿到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指针,分别指向自己实现的函数,这样程序在运行到虚函数时,就会查找这个指针具体指向的地址空间,执行自己的实现函数。

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

C++的多态如何在编译和运行期实现?  C++对象模型 第1张

评论列表暂无评论
发表评论
微信