zoukankan      html  css  js  c++  java
  • 静态编译和动态编译(函数)实现

    资料来源于网络
     
    C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。
     
    1. 静态联编
     
    静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调用)与执行该操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联编对函数的选择是基于指向对象的指针或者引用的类型。其优点是效率高,但灵活性差.
     
     
     

    2. 动态联编

    动态联编是指联编在程序运行时动态地进行,根据当时的情况来确定调用哪个同名函数,实际上是在运行时虚函数的实现。这种联编又称为晚期联编,或动态束定。动态联编对成员函数的选择是基于对象的类型,针对不同的对象类型将做出不同的编译结果C++中一般情况下的联编是静态联编,但是当涉及到多态性和虚函数时应该使用动态联编。动态联编的优点是灵活性强,但效率低

    动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数,其格式为:指向基类的指针变量名->虚函数名(实参表)或基类对象的引用名.虚函数名(实参表)

     

    实现动态联编需要同时满足以下三个条件:

    ①    必须把动态联编的行为定义为类的虚函数

    ②    类之间应满足父子类型关系,通常表现为一个类从另一个类公有派生而来。

    ③    必须先使用基类指针指向子类型的对象,然后直接或者间接使用基类指针调用虚函数

     

    3. 动态联编分析

     动态联编要求派生类中的虚函 数与基类中对应的虚函数具有相同的名称、相同的参数个数和相同的对应参数类型、返回值或者相同,或者都返回指针或引用,并且派生类虚函数所返回的指针或引 用的基类型是基类中虚函数所返回的指针或引用的基类型的子类型。如果不满足这些条件,派生类中的虚函数将丢失其虚特性,在调用时进行静态联编。(隐藏)

     

    4. 小结

    从以上四个例子中可以看出:虚函数是实现多态的基础,是实现动态联编的必要条件之一。动态联编要靠虚函数来实现,虚函数要靠动态联编的支持。两者相辅相成,缺一不可。

     

    所以

    多态实现可分为:

    静态动态(编译时多态):主要通过函数和运算符重载来实现;

    动态动态(运行时多态):主要通过继承和虚函数来实现.

    (函数重载说的简单就是: 类中存在相同函数名且参数列表不同的多个函数,可称之为函数重载.)
     

    多态性的实现与静态联编、动态联编有关。静态联编支持的多态性称为编译时的多态性,也称静态多态性,它是通过函数重载和运算符

     

     

     

     

  • 相关阅读:
    LA 3882
    Codeforces 161D
    spoj PARTIT
    uva 10496 Collecting Beepers
    uva 10130 SuperSale
    spoj 3885
    NWERC 2012 Problem I Idol
    NWERC 2012 Problem E Edge Case
    【USACO 1.3.2】修理牛棚
    【USACO 1.3.1】混合牛奶
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2712893.html
Copyright © 2011-2022 走看看