zoukankan      html  css  js  c++  java
  • 这两个成员函数inline重新virtual种类

    inlineType表示在编译时扩展功能,随着在函数调用的函数体而出替换函数调用;和vitual它是c++多态的必要条件,但为了表现出多态性,您将需要等到执行,要知道什么是真正的函数调用。从表面上看这两个keyword假定同时使用,将生成一个错误。但不会。

    先简单说一下虚表的机制:多态的实现是由虚表加以支持的,凡是有虚函数的对象,都会在构造函数開始时构造一个虚表,虚表中的第一个元素通常是对象的类型信息。其它每一个元素存放的是真正函数的地址,假设子类覆盖了父类的虚函数,则相应的位置中的地址就会被改动。可是同一个函数在虚表中的位置即下标是同样的。

    当我们用基类指针或者引用调用一个虚函数时,在编译期仅仅知道该函数在某个虚表的第几个位置,可是不知道是父类的虚表还是子类的虚表,仅仅有到执行时才干确定是哪一个虚表。从而表现出多态。但假设你不是使用基类的指针或者引用调用虚函数,或者你调用的不是虚函数,则在编译期间就能够直接找到成员函数的地址,不须要等到执行时才确定,由于此时,调用者是哪个对象已经确定,从而该函数的地址也是确定的。

    依据上面的描写叙述,尽管virtual所代表的多态类型是要在执行时确定的,可是假设调用者不是基类的指针或者引用,则该virtual的地址会在编译期间就确定,因而此时能够用inline进行展开。即使使用了基类的指针或引用进行调用,也不会产生错误,此时inline将不会展开,但virtual仍然表现多态性。由于inline毕竟,只是建议,而不是强迫,因此,两者是不矛盾。

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    利用Percona monitoring for zabbix监控MySQL
    SQL Server复制故障(1)
    SQL Server事务复制搭建与同步经验
    达梦7入门技术总结--DCA级别
    机器学习:双聚类算法
    脑洞篇之我们生活在9维世界
    自动化运维:使用flask+mysql+highcharts搭建监控平台
    深度学习:Keras入门(二)之卷积神经网络(CNN)
    深度学习:Keras入门(一)之基础篇
    机器学习:特征选择
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4869021.html
Copyright © 2011-2022 走看看