zoukankan      html  css  js  c++  java
  • 泛型技术

    所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。

    关于虚函数表的说明

    1、 只有存在虚函数的类才有虚函数表

    2、 虚函数表是类拥有的,不是对象拥有的,对象拥有指向虚函数表的指针,相同类的所有对象的指针都是一样的。

    3、 有些类可能有多个虚函数表,因为这些类从不同的基类继承了虚函数,这个时候类对象也需要有多个指针指向不同的虚函数表

    4、 为了保证性能,对象会把虚函数表指针放在对象内存的前面。

    5、 如果有多个虚函数表,子类的成员函数会放到第一个声明的基类的虚函数表里面。

    虚函数表的缺点和总结

    1、 虚函数表的开销有点大,每个类都需要有自己的虚函数表,可能不止一个,每个对象都要有指向这些虚函数表的指针。MFC就没有采用这种机制,因为MFC中会派生出很多个类,这样每个类都要维护这样的虚函数表,但是每个类的要重写虚函数却很少,这样虚函数表里面大部分的函数指针都是指向基类函数的,就会造成重复和浪费,因此它使用的是一组结构体的宏定义来实现消息映射实现的。按照函数名称查表,这种方案可以避免如上的问题;但是由于要比较名称,有时候要遍历所有的继承结构,时间效率性能不是很高。

    2、 如果继承体系的基类的virtual成员不多,而且在派生类要重写的部分占了其中的大多数时候,用C++的虚函数机制是比较好的;但是如果继承体系的基类的virtual成员很多,或者是继承体系比较庞大的时候,而且派生类中需要重写的部分比较少,那就用名称查找表,这样效率会高一些,很多的GUI库都是这样的,比如MFC,QT。

  • 相关阅读:
    PB笔记之导入、导出组件
    pb笔记之数据窗口设置操作
    PB笔记之第一行数据不能删除的解决方法
    PowerBuilder学习笔记之行删除卡死问题
    PB笔记之数据窗口行不能编辑的原因
    PB笔记之导出为Excel的方法
    PowerBuilder学习笔记之导入Excel数据
    PB笔记之数据窗口添加虚拟列的方法
    PowerBuilder学习笔记之调用事件和函数
    Apache按日切分日志
  • 原文地址:https://www.cnblogs.com/suntp/p/6426339.html
Copyright © 2011-2022 走看看