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

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

    关于虚函数表的说明

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

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

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

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

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

    虚函数表的缺点和总结

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

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

  • 相关阅读:
    .net从网络接口地址获取json,然后解析成对象(一)
    .net获取本地ip地址
    .net上传文件,利用npoi读取文件信息到datatable里
    .net利用NPOI生成excel文件
    .NET获取城市信息(将三字代码转换成城市名)
    JS下拉页面时一个横幅的样式和js
    整数中1出现的次数(1~n)
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/suntp/p/6426339.html
Copyright © 2011-2022 走看看