美文网首页
Function语意学---Chapter4

Function语意学---Chapter4

作者: Supreme_DJK | 来源:发表于2018-10-11 22:21 被阅读0次
    • name mangling(名称的特殊处理)
    • static member function
    1. 没有this指针
    2. 不能直接存取class中的nonstatic member
    3. 不能被声明为const、volatile或virtual
    4. 不需要经由class object才被调用---虽然大部分时候是被这样调用的
    5. 取static member function的地址,获得的是其在内存中的位置,由于static member function没有this指针,所以其
      地址类型为nonmember函数指针,而不是一个指向class member function的指针
    • virtual member functions 虚拟成员函数
    1. 在C++中, 多态表示以一个public base class 的指针(或reference),寻址出一个derived class object的意思。
    Point *ptr = new Point2d;
    
    1. 识别一个class是否支持多态,唯一适当的方法就是看看它是否有任何的virtual function,只要class拥有一个virtual function,它就需要这份额外的执行期信息。
    2. vbtl中slot从1开始

    4. 一个class只会有一个virtual table,其中内含对应class object中所有的active virtual functions的函数实体的地址。这些active virtual functions包括:

    • 一个class定义的函数实体。它会改写overriding一个可能存在的base class virtual function。

    • 继承自base class的函数实体。此时该class不改写base class virtual function。

    • 一个pure_virtual_called()函数实体,它既可以扮演pure virtual function的空间保卫者,也可以当作执行期异常处理函数。如果该函数被调用,通常的操作是结束程序。

    1. 每一个virtual function都被指派一个固定不变的索引值,该值在整个继承体系中保持与特定virtual function的关联。这样就可以在编译时期设定virtual function的调用。

    2. 多重继承下,一个上层basse classes数目为n的derived class,它将内含n-1个额外的virtual tables。其主要实体与最左端的base class共享,其中包含所有virtual functios的地址;n-1个次要实体与其它base classes有关,其中只包含出现在对应base class中virtual functions的地址。

    3. 在多重继承中支持virtual function,其复杂度围绕在第二个及后继base class上,以及执行期this指针调整上。第二(或后继)base class会影响对virtual function支持的3种情况:

    • 通过指向第二个base class的指针,调用derived class virtual function;
    • 通过指向derived class的指针,调用第二个base class中一个继承而来的virtual function;
    • 允许virtual function函数的返回值类型有所变化,可能是base type,也可能是publicly derived type。
    1. 关于执行期this指针调整比较有效率的解决方法是thunk。所谓thunk是一小端assembly码,用来以适当的offset值来调整this指针并跳到相应的virtual function。thunk技术允许virtual table slot继续内含一个简单的指针,此时多重继承将不需要任何空间上的额外负担!slots中的地址可以直接指向virtual function,也可以指向一个相关的thunk。

    相关文章

      网友评论

          本文标题:Function语意学---Chapter4

          本文链接:https://www.haomeiwen.com/subject/gwdeaftx.html