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

  • 相关阅读:
    JAVA基础知识之多线程——线程通信
    为Apache配置虚拟机Virtual Host
    SignalR的坑爹细节
    ashx入侵
    aspnet5安装ef7备忘
    aspnet5备忘
    NHibernate初步使用
    MVC中发生System.Data.Entity.Validation.DbEntityValidationException验证异常的解决方法
    关于NLog的target和Layout
    泛型约束的大概模样
  • 原文地址:https://www.cnblogs.com/zhaobinyouth/p/6168968.html
Copyright © 2011-2022 走看看