zoukankan      html  css  js  c++  java
  • 哪些函数不能为virtual函数

    1> 内联函数

    内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数。

    虚表机制需要一个真正的函数地址,而内联函数展开以后,就不是一个函数,而是一段简单的代码(多数C++对象模型使用虚表实现多态,对此标准提供支持)

    2> 构造函数

    构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数。

    简单来说就是:虚函数对应一个指向vtable虚函数表的指针,虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,将无法进行。

    3> 静态成员函数

    静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别

    4>友元函数
    因为C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。

    http://blog.csdn.net/freeboy1015/article/details/7635012

    http://blog.csdn.net/yapian8/article/details/42532075

  • 相关阅读:
    TXLSReadWriteII 公式计算
    Delphi TXLSReadWriteII2 带的demo中直接编辑XLS文件的例子
    delphi图片欣赏
    SQL 读取csv 文件批量插入数据
    Delphi TXLSReadWriteII 导出EXCEL
    Rollup 与 webpack的区别
    ref 属性使用eslint报错
    内容超出省略实现
    mac 环境配置
    前端学习资料整理
  • 原文地址:https://www.cnblogs.com/zhaobinyouth/p/6168968.html
Copyright © 2011-2022 走看看