zoukankan      html  css  js  c++  java
  • C++学习基础十九——函数重载

    1. 重载函数定义

    出现在相同作用域内的函数,如果其函数名相同,而形参列表不同,则称之为重载函数。

    形参列表不同的含义为:形参个数不同或形参类型不同,函数不能基于返回值类型不同实现重载。

    函数重载与重复声明的区别:

    • 如果两个函数返回值类型和形参列表相同,则第二个函数视为重复声明。

    • 如果两个函数的形参列表完全相同,而返回值不同,则第二个函数声明是错误的。

    2. 函数重载与const 形参

    函数重载是基于形参列表的不同而实现的,但是const形参与非const形参有些情况下不能实现函数重载。

    看以下代码:

     1 void lookup(Phone tm);
     2 void lookup(const Phone tm);//重定义
     3  4 void lookup2(Phone& ph);
     5 void lookup2(const Phone& ph);//重载
     6  7 void lookup3(Phone* ptr);
     8 void lookup3(const Phone* ptr);//重载
     9 10 void lookup4(Phone* ptr);
    11 void lookup4(Phone* const ptr);//重定义

    形参与const形参的等价性仅适用于非引用形参,也就说对于引用和指针来讲,

    const形参与非const形参可用于实现函数重载,具体情况如下:

    (1) 有const引用形参的函数与有非const引用形参的函数是不同的。

    (2)有指向const类型的指针形参的函数,与带有指向相同类型的非const对象的指针形参的函数不同。

    (3)不能基于指针本身是否为const来实现函数重载。因为const修饰指针本身,而不是修饰指针所指向的类型。 

    3. 注意区分指针常量和常量指针

    1 const int* ptr;//常量指针
    2 int const* ptr2;//常量指针
    3 int* const ptr3 = NULL;//指针常量

    常量指针:指针所指向的对象为常量,不允许修改。

    指针常量:指针本身为常量,指针的值不允许修改,即不能再指向其他的地址。

  • 相关阅读:
    RabbitMQ 内存控制 硬盘控制
    Flannel和Docker网络不通定位问题
    kafka集群扩容后的topic分区迁移
    CLOSE_WAIT状态的原因与解决方法
    搭建Harbor企业级docker仓库
    Redis哨兵模式主从持久化问题解决
    mysql杂谈(爬坑,解惑,总结....)
    Linux的信号量(semaphore)与互斥(mutex)
    SIP协议的传输层原理&报文解析(解读rfc3581)(待排版) && opensips
    SIP协议的传输层原理&报文解析(解读RFC3261)(待排版)&&启动
  • 原文地址:https://www.cnblogs.com/calence/p/12664038.html
Copyright © 2011-2022 走看看