C++学习笔记(十二):重载函数
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++学习笔记(十二):重载函数的更多相关文章
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- java jvm学习笔记十二(访问控制器的栈校验机制)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...
- (C/C++学习笔记) 十二. 指针
十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...
- Python学习笔记(十二)—Python3中pip包管理工具的安装【转】
本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...
- JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)
1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...
- Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包
子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中. 子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...
- Java学习笔记十二:Java中方法的重载
Java中方法的重载 什么是方法的重载呢? 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方法名称都为 s ...
- Swift学习笔记十二
方法 方法就是和某种特定类型相关联的函数.类.结构体.枚举都可以定义实例方法和类型方法.类型方法和OC中的类方法类似. 结构体和枚举也可以定义方法是Swift与C/OC之间很大的一个区别,在OC中,只 ...
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
随机推荐
- mfc主窗口添加背景图片后,如何实现在背景图片上输出文字
1.若是文档视图程序的话,在视图类的OnDraw(CDC* pDC)函数中调用pDC->TextOut()函数,就像平常输出文字一样.若是嫌文字的背景颜色破坏了图像,可以在输出文字之前调用pDC ...
- 在myeclipse中修改svn帐户
把C:\Users\Administrator\AppData\Roaming\Subversion\auth\这个文件中所有文件删除 然后在myeclipse中同步会让你输入用户名和密码
- Python之路:迭代器和yield生成器
一.迭代器 对于Python 列表的 for 循环,他的内部原理:查看下一个元素是否存在,如果存在,则取出,如果不存在,则报异常 StopIteration.(python内部对异常已处理) 使用迭代 ...
- SQL Identity自增列清零方法
1.使用DBCC控制台命令: dbcc checkident(表名,RESEED,0) 2.truncate table 也可将当前标识值清零 但当有外键等约束时,无法truncate表 可以先禁用外 ...
- 基于visual Studio2013解决C语言竞赛题之0301函数求值
题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <math.h> void main() ...
- for语句之侦查队挑选人、猴子吃桃、5个小朋友算年龄、1 () 2 () 3 ()4 = 4;问括号里我要填 (- 或 +)问题
1.某侦察队接到一项紧急任务,要求在A.B.C.D.E.F六个队员中尽可能多地挑若干人,但有以下限制条件:侦察兵A和B两人中至少去一人: a+b>=1(由于每个队员有两种状态:去与不去,假设不去 ...
- postgres-xc手册生成方法
步骤 检测编译环境 安装编译工具 编译 以上只在linux环境当中进行,本人所用系统ubuntu15.04 检测编译环境 在posgtgresql目录下运行./configure,并安装需要安 ...
- Read and Write NSArray, NSDictionary and NSSet to a File
查询地址:http://iosdevelopertips.com/data-file-management/read-and-write-nsarray-nsdictionary-and-nsset- ...
- BZOJ 2134: 单选错位( 期望 )
第i个填到第i+1个的期望得分显然是1/max(a[i],a[i+1]).根据期望的线性性, 我们只需将每个选项的期望值累加即可. ---------------------------------- ...
- BZOJ 1797: [Ahoi2009]Mincut 最小割( 网络流 )
先跑网络流, 然后在残余网络tarjan缩点. 考虑一条边(u,v): 当且仅当scc[u] != scc[v], (u,v)可能出现在最小割中...然而我并不会证明 当且仅当scc[u] = scc ...