• C++函数的重载,覆盖和隐藏(——高质量编程第14章)


      函数重载概念

          只有C++才有重载的概念,C语言没有。

          靠行参列表的不同来区别不同的重载函数,

          若是全局函数和成员函数同名时,不算重载,因为它们的作用域不同,所以成员函数会将全局函数给隐藏(遮蔽)了。

    成员函数的重载,覆盖和隐藏

          重载发生在相同的作用域中,而覆盖则发生在不同的作用域中

    重载:

          相同的作用域

          函数的名字相同

          函数的形参列表,顺序,类型,个数不同

          virtual可有可无

    覆盖:

          作用域不同,属于不同的类中

          函数的名字相同

          形参列表相同

          基类必须是虚函数

    隐藏是指派生类的成员函数遮蔽了与其同名的基类成员函数

    》》派生类的成员函数与基类的同名,但形参列表不同,这时不论基类是否是virtual基类函数都将被隐藏

    》》派生类的成员函数与基类的同名,行参列表相同,而基类成员函数不是virtual,会被隐藏

    》》指针的静态类型即指针定义时的类型,与后面的赋值的类型无关。

    2. 运算符的重载

    (1)不能重载的运算符(考点)

    "."    ".*"    "?:"      "sizeof()"     "typeid()"       "static_cast<>"    "dynamic_cast<>"      "const_cast<>"

    "#"    "##"

    (2)如果重载为成员函数,则this对象发起对它的调用

    (3)如果重载为全局函数,则第一个参数发起对它的调用。

    const成员函数:

    (1)const成员函,const关键字放在函数的末尾。

    (2)函数的内部不会修改任何数据成员。

    (3)不能在函数内部修改数据成员和调用其他的非const函数。

    (4)const成员函数和返回const类型没有必然的联系。

    (5)static成员函数一定不能定义为const的,static成员函数只是全局函数的一个形式上的封装,全局函数

           没有const一说。

    注意:

    const对象只能调用const成员函数,而非const对象既可以调用const成员函数,又可以调用非const成员函数。

  • 相关阅读:
    类别的三个作用
    require()
    commonJS
    ng-app&data-ng-app
    《css网站布局实录》(李超)——读书札记
    高性能JS(读书札记)
    两个同级div重叠的情况
    前端性能优化
    正则表达式
    ajax
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/4681458.html
Copyright © 2020-2023  润新知