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. PHPExcel 生成excel统计表格

    db.php为数据库操作类, $config为数据库配置,PHPExcel版本为PHPExcel_1.8.0,  php代码: $dir = dirname(__FILE__); require $d ...

  2. uoj #2 【NOI2014】起床困难综合症 贪心+位运算

    题目链接 给出n个数, 每个数有特定的一种操作, &|^三种, 给出一个m, 初始值属于[0,m],选定一个初始值, 使所有操作做完之后的值最大, 输出这个最大值. 1, 从最高位贪心, 如果 ...

  3. Python学习之路——字符处理(二)

    一.set集合: set是一个无序且不重复的元素集合 建立一个集合: x = set([1, 'tom', 2, 3, 4]) print(type(x)) print(x) 以上实例运行后反回结果结 ...

  4. IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】

    NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...

  5. 数据结构——二叉搜索树(Binary Search Tree)

    二叉树(Binary Tree)的基础下 每个父节点下 左节点小,右节点大. 节点的插入: 若root==NULL则root=newnode 否则不断与节点值比较,较小则向左比较,较大则向右比较. 完 ...

  6. ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3

    ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3

  7. Codeforces Round #200 (Div. 2) C. Rational Resistance

    C. Rational Resistance time limit per test 1 second memory limit per test 256 megabytes input standa ...

  8. 技术贴:解码时AVC1和H264的差别

    我一直疑问为什么有些视频解码时显示格式是:H264,大部分又是:AVC1 我在搜索编程资料时在微软的msdn上发现的: 原文:http://msdn.microsoft.com/en-us/libra ...

  9. 《Java并发编程实战》第二章 线程安全性 读书笔记

    一.什么是线程安全性 编写线程安全的代码 核心在于要对状态訪问操作进行管理. 共享,可变的状态的訪问 - 前者表示多个线程訪问, 后者声明周期内发生改变. 线程安全性 核心概念是正确性.某个类的行为与 ...

  10. [置顶] NGINX原理分析之SLAB分配机制

    一.基础概述 如果使用伙伴系统分配和释放算法,不仅会造成大量的内存碎片,同时处理效率也比较低.SLAB是一种内存管理机制,其核心思想是预分配.SLAB是将空间按照SIZE对内存进行分类管理的,当申请一 ...