• 泛型技术


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

    关于虚函数表的说明

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

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

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

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

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

    虚函数表的缺点和总结

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

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

  • 相关阅读:
    is 和 == 区别@编码
    python字典
    python的简介
    初始python3
    初始python2
    初始python1
    Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) B2. TV Subscriptions (Hard Version)
    Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) A. Forgetting Things
    2019ICPC区域赛(银川)总结
    Educational Codeforces Round 74 (Rated for Div. 2) D. AB-string
  • 原文地址:https://www.cnblogs.com/suntp/p/6426339.html
Copyright © 2020-2023  润新知