zoukankan      html  css  js  c++  java
  • 【c++ primer, 5e】函数重载

    【函数重载】

    Java中的重载一般是指重载构造器,或是子类覆写父类的方法;C++中的重载稍微复杂一些。

    定义重载函数

    典型的数据库应用。

    Record lookup(const Account&);
    Record lookup(const Phone&);
    Record lookup(const Name&);

    判断两个形参类型是否相异

    1、声明的时候省略形参和没省略是等价的。

    2、起了类型别名也改变不了本质。

    载和const形参

    1、一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来。例如:

    Record lookup(Phone x1);
    Record lookup(const Phone x2);

    在上面的例子中,x1和x2都作为“对象的持有者”,并且可以持有的对象相同:两者都可以”持有“常量和变量,所以无法区分。

    再如:

    Record lookup(Phone* y1);
    Record lookup(Phone* const y2);

    不论是常量指针y2,还是普通指针y1,都是”既可以指向变量,也可以指向常量“。

    2、但是,底层const形参和非const的同名形参是可以区分的,例如Name&和const Name&、Name*和const Name*。虽然const Name&既可以接收const对象也可以接收非const对象,但是当发生上述重载、调用的时候,编译器会优先选用非cosnt版本的函数。

    const_cast和重载

    1、C++函数返回引用

    所以,返回引用的好处在于:不用创建副本变量。

    2、重载函数可以调用另一个重载函数。

    3、const_cast只能去掉本来就不是const变量的变量的const属性。

    调用重载函数

    可能会有三种结果:最佳匹配、无匹配、二义性调用。(后两者都会发生错误)

    6.39

    a 非法

    b 非法

    c 合法

    【重载与作用域】

     内层声明的与外层函数同名的变量、函数都会屏蔽外层函数,而不是重载!

  • 相关阅读:
    Shapelib库编译
    CheckedComboBoxEdit实现单选
    VS2019卡在创建Windows恢复点
    ArcGIS Add-In 创建自定义菜单
    使用DevExpress展示地图—加载SHP
    未能从程序集ESRI.ArcGIS.AddIns.SDK加载任务"ValidateAddInXMLTask"
    没有为该对象定义无参数的构造函数
    RichEditControl自定义高亮语法
    Java解析Word模版,替换${}的值
    64.QT-单播、广播、组播
  • 原文地址:https://www.cnblogs.com/xkxf/p/6622553.html
Copyright © 2011-2022 走看看