美文网首页
CPP函数重载、覆盖的实现原理

CPP函数重载、覆盖的实现原理

作者: zlrs | 来源:发表于2020-03-04 17:18 被阅读0次

函数重载

  • 函数重载也被成为编译时多态。
  • 函数重载是在同一命名空间中,根据参数列表对同名函数的编译时绑定(resolve)。编译器根据函数调用语句的参数列表,对当前可见的同名函数进行类型检查、匹配,并绑定到拥有正确签名的函数。

函数重载的实现

  • C++编译器对函数做了名称修饰(name mangling),用于支持重载。
  • C对函数的名称修饰只包括函数名,C++对函数的名称修饰还涉及函数的参数列表。C++的函数int foo(int, double)在修饰后类似这样__foo_int_double_
  • C++就是通过名称修饰来完成函数重载的。

关于类的成员函数的名称修饰

  • C++编译器看待非静态成员函数的方式和普通C函数类似,只是在参数列表中增加了一个this指针,用来表明是哪一个对象调用的该成员函数。
  • 对于静态成员函数,参数列表中没有this指针。
  • P.S. 静态成员函数和非静态成员函数的存储位置是代码区。对对象的大小没有影响。

函数覆盖

  • 这个话题有很多种说法,以下说法实际上说的都是一回事:函数覆盖 = 虚函数 = 动态绑定 = 运行时绑定 = 运行时多态
  • 函数覆盖指的就是C++的虚函数机制。基类的虚函数在函数签名相同的情况下,可以被子类重写。函数覆盖的实现指的就是C++虚函数的实现。

函数覆盖的实现

  • 编译器给每个有虚函数的类分配一个虚函数表。
  • 每个类实例隐式地有一个且只有一个续表指针成员。
  • 当运行时指针或引用去调用虚函数时,通过搜索类实例的虚表指针指向的虚表,动态绑定函数到虚表中的某个函数,这一步需要做函数签名的匹配。

相关文章

  • CPP函数重载、覆盖的实现原理

    函数重载 函数重载也被成为编译时多态。 函数重载是在同一命名空间中,根据参数列表对同名函数的编译时绑定(resol...

  • c++操作符重载

    一. +号操作符重载 1.在类中重载 在 .h声明 在 .cpp文件 2.全局函数重载 在 .h声明中声明友元函数...

  • C++中的运算符重载

    1.Cpp中的重载运算符和重载函数 C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算...

  • linux c/c++面试知识点整理(三)

    21、类成员函数的重载、覆盖和隐藏的区别 重载即为函数重载,重载的特征: (1)相同的范围,也就是在同一个类中...

  • C++基础9:函数、函数重载、运算符重载

    一.函数 1.函数重载,函数覆盖,函数隐藏三者的区别,概念 函数重载:在一个类中,函数与函数的函数名相同,参数类型...

  • 2018-05-05

    CPP强弱类型 宽字符本地化 函数模板 函数重载: 根据参数来识别函数模板: 原生函数优先于模板函数 强行调用...

  • 函数的覆盖,隐藏,重载

    函数的覆盖 1.基类函数必须是虚函数 2.发生覆盖的两个函数必须分别位于基类和派生类中 3.函数名称与函数列表必须...

  • 2018-07-22 重载、重写(覆盖)、隐藏

    成员函数的重载,覆盖(多态)和隐藏 重载 函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可...

  • c++ 运算符重载

    重载方法 运算符的重载实质上是函数的重载。函数的重载就是对一个已有函数赋予新的含义,使之实现新的功能。 重载运算符...

  • C++ 多态的实现和原理

    多态的实现虚函数原理 一、在编译期间实现多态 多态是指在不同的条件下表现出不同的状态,C++中通过重载函数的方法可...

网友评论

      本文标题:CPP函数重载、覆盖的实现原理

      本文链接:https://www.haomeiwen.com/subject/voavkhtx.html