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. Joel在耶鲁大学的演讲

    Joel Spolsky是一个美国的软件工程师,他的网络日志"Joel谈软件"(Joel on Software)非常有名,读者人数可以排进全世界前100名. 上个月28号,他回到 ...

  2. web.xml 的加载顺序

    context-param -> listener -> filter -> servlet

  3. ThinkPHP第九天(在Admin分组中配置__PUBLIC__,$POST异步传输,import使用方法,验证码点击刷新方法,Create方法作用)

    1.项目分组之后,后台模板的公用文件一般放置在Tpl/Admin/Public中,这样子在替换模板路径时候如果还用__PUBLIC__时为了不与前台冲突,应该在Admin/config.php中配置一 ...

  4. django 基础入门(二)

    一.关于数据库 1.首先django 1.9以上等版本不支持pymysql,因此需要做一些调整. 比如在settings.py 加入一段代码: import pymysql pymysql.insta ...

  5. (IOS)数据持久化

    1.属性列表序列化 2.模型对象归档 3.嵌入式SQLite3 4.Core Data 5.应用程序设置 6.UIDocument管理文档存储 7.iCloud Demo界面: 1.属性列表序列化 即 ...

  6. spring mvc项目【转载】

    用了好几年的ssh2.最近打算研究下spring的mvc,看看如何,可以的话后期的项目将都是用springmvc+spring jdbc的形式,这样就少了其他框架的继承.由于以前没用过springmv ...

  7. 安装ADT 提示 android ADT Unable to connect to repository

    以往安装ADT根本就不是个问题,可是现在就是个大问题了,联通的宽带网络连www.google.com.hk都打不开,你叫我们这些P民怎么活? https://dl-ssl.google.com/and ...

  8. 转:前端冷知识(~~some fun , some useful)

    前端不为人知的一面——前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Qu ...

  9. perl post 带上请求头

    my $url='https://www.zjcap.cn/business/dispatch_post.do?action=submitAdminLogin'; my $res = $ua-> ...

  10. 在 Windows Azure 网站 (WAWS) 上对 Orchard CMS 使用 Azure 缓存

    编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 如果您当前的 OrchardCMS 网站在 Windows Azure 网站 ...