1、 什么是重载函数

假设同一作用域内的几个函数名字同样但形參列表不同。那么这些函数就称之为——重载函数。

比如:

void print( const char *cp);

void print(const int *begin , const int *end);

void print(const int ia[], int size);

上面的这些构造函数运行的操作很的相似。都是打印一些数据。可是接受的形參却不一样。 当调用这些函数时,编译器会依据传递的实參类型判断想要运行的是哪个函数。

比如:

int j[2] = {0,1};

print(“hello world”);  //调用print( const char *cp);

print(begin(j),end(j));  //调用print(const int *begin , const int *end);

print(j, end(j) - begin(j)); //调用print(const int ia[], int size);

2、重载函数的作用:

函数的名字不过让编译器知道它调用的是哪个函数,而函数重载能够在一定程度上减轻程序猿起名字、记名字的负担。

3、 定义重载函数的注意点

①不同意两个函数除了返回类型外其它全部的元素都同样。

即假设两个函数返回值不同。形參列表同样,那么第二个函数的申明时是错误的。

②有些形參列表看起来不一样,可是实际上是同样的,比方:

bool lookup(const Account &acct);

bool lookup(const Account & );  //省略了形參,可是实际上是一样的

bool lookup(Phone);

bool lookup(const Phone);  //反复申明

③假设形參是某种类型的指针或引用。则上诉情况会不同,比如:

bool lookup(Account &);     //作用于Account的引用

bool lookup(const Account &);//作用于常量引用

bool lookup(Account *);     //作用于指向Account的指针

bool lookup(const Account &);//作用指向常量的指针

在上面的四个函数中,编译器通过实參是否是常量来判断应该调用哪个函数。由于const不能转换成其它类型,所以仅仅能把const对象(或者指向const的指针)传递给const形參。相反的,由于很量能够转换成const,所以上面的4个函数都能够作用很量对象或者指向很量对象的指针。只是,当我们传递很量对象时。编译器会优先选用很量版本号的函数。

4、 调用重载函数

重载函数存在的意义在于减轻程序猿记函数名称和个给函数取名的负担,因此在调用重载函数时,要明白的差别调用的重载函数形參列表的不同。要么形參列表的数量不同。要么类型差异较大。

在调用重载函数时。编译器会依据传入的实參的类型或者数量的不同来确定调用的是哪个重载函数。

一般的调用重载函数会有三种可能:

①编译器找到一个与实參最佳匹配的函数,并调用该函数的代码。

②找不到不论什么一个函数与调用的实參匹配,此时编译器发出“无匹配”错误。

③有多个函数能够匹配。可是每个都不是明显的最佳选择。此时编译器发出“二义性调用”错误。

C++学习笔记(十二):重载函数的更多相关文章

  1. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  2. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  3. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  4. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

  5. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  6. JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)

    1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...

  7. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  8. Java学习笔记十二:Java中方法的重载

    Java中方法的重载 什么是方法的重载呢? 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方法名称都为 s ...

  9. Swift学习笔记十二

    方法 方法就是和某种特定类型相关联的函数.类.结构体.枚举都可以定义实例方法和类型方法.类型方法和OC中的类方法类似. 结构体和枚举也可以定义方法是Swift与C/OC之间很大的一个区别,在OC中,只 ...

  10. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

随机推荐

  1. C++中(int&)和(int)的区别

    在说这个问题之前,先说两个需要知道的背景知识: (1)语言的类型的强制转换不会修改原来的数据,会另外的开辟一个临时的或者程序中指定的空间来存储强制转换后的值. (2)C++引用的实现是在符号表中动了手 ...

  2. [LeetCode]题解(python):025-Reverse Nodes in k-Group

    题目来源: https://leetcode.com/problems/reverse-nodes-in-k-group/ 题意分析: 这道题目和上一题目类似,输入一个链表和一个整型k.每k个翻转一下 ...

  3. vs2010中iostream.h出错

    使用 #include <iostream> using namespace std; 替代 VS2010删除了所有非标准库,保留了C++标准库,iostream.h是以前旧版的库,VS2 ...

  4. Qt 技巧: 解决未解析的SSL问题

    因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/product ...

  5. stm32之595(spi芯片)

    595是一款串转并的芯片:  (三极管的功能) /*Include---------------------------*/ #include"stm32f10x_lib.h" / ...

  6. 【NGROK】快速实现本地Web服务到外网的映射

    NGROK官网:https://ngrok.com NGROK百科:http://baike.baidu.com/view/13085941.htm?fr=aladdin 使用ngrok(Window ...

  7. 机器学习笔记(一)- from Andrew Ng的教学视频

    最近算是一段空闲期,不想荒废,记得之前有收藏一个机器学习的链接Andrew Ng的网易公开课,其中的overfiting部分做组会报告时涉及到了,这几天有时间决定把这部课程学完,好歹算是有个粗浅的认识 ...

  8. Opencv2系列学习笔记2(图像的其它操作)

    本节主要涉及到图像的领域.算术操作以及如何操作图像感兴趣的区域. 一:邻域操作 以下例子主要对图像进行锐化.基于拉普拉斯算子<后面讨论>.这幅图像的边缘部分将得到放大,细节部分将更加的锐利 ...

  9. ECSHOP常用函数

    lib_time.php gmtime() #获得当前格林威治时间的时间戳 /$0 server_timezone() #获得服务器的时区 /$0 local_mktime($hour = NULL ...

  10. video.js的使用

    跨浏览器地播放视频,在网上找了一下,找到了video.js,记录一下video.js的简单用法. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 ...