1.概念:同意作用域的一组参数列表不同,函数名相同的函数,这组函数叫函数重载(C语言是不能定义相同名称的函数,但是C++可以允许定义)。

2作用:重载函数通常来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有着很大的好处(一物多用)。参数列表不同:1.参数类型不同 2.参数顺序不一样 3.参数个数不同 ;重载版本根据参数匹配度进行选择(根据不同的情况函数重载会有不同)当我传入两个double型的数据,我们又定义几个不同类型的参数,最后还是会选择double类型的重载。

注意:

1.1 与函数参数的变量名无关

1.2 函数的返回值类型与重载无关

2.函数重载的实现原理是通过C++实现的extern “C” int fun()(没有形成换名)的形式可以c的方式生成函数名(无换名机制)

3.使用场景:当函数基本上执行相同的任务的时候,使用不同形式的数据时

我知道概念很难懂又晦涩,我也一样,看下面这个特别简单的代码你会发现重载其实很好理解:

#include<iostream>
using namespace std;
namespace Chongzai_one{
void add(int a,int b){
cout<<"int+int="<<a+b<<endl;
}
void add(int a,double b){
cout<<"int+double="<<a+b<<endl;
}
void add(double a,double b){
cout<<"double+double="<<a+b<<endl;
}
}//函数名相同,参数列表不同是因为他们的参数类型不同
int main(){
using namespace Chongzai_one;
add(,);//得到的结果为3
add(,2.5);//得到的结果为3.5
add(2.3,2.3);//得到的结果为4.6
getchar();
return ;
}

看懂了吧。这三个add函数它们的功能都是加法只是参数类型不同,如果用不同的名字反而会影响程序的可读性。当然你想写成字符串形式也是可以的(PS:下面n+m最后会显示的是字符ASCLL的合)看下面代码:

namespace Chongzai_two{
void print(char n){
cout<<"show1="<<n<<endl;
}
void print(char n,char m){
cout<<"show2="<<n+m<<endl;
}
}

参数类型相同或者返回类型不同但参数类型相同都是不会形成重载的。如果我把第一个代码中的第一个重载函数的void改成int,把参数类型换成和第二个重载函数一样那么它就会报错。当出现extern "C" int fun();的时候,则是用C语言运行程序,此时的函数名将不会改变,例如下面这个代码:

extern "C" int fun(int a,int b){
cout<<"a+b="<<a+b<<endl;
}
int fun(double a,double b){
cout<<"a+b"<<a+b<<endl;
}

其实这个代码并没有变更函数名,启动后台程序发现还是会有两个fun函数,这就是extern在这里的用法,此外extern还可以作为调用同一个工程下其他文件内的命名空间。这里只是简单的介绍了一下,以后还会在博客里会重点介绍函数的用法。

【C++初学者自学笔记二】函数重载(模块一)的更多相关文章

  1. Python:笔记(2)——函数与模块

    Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...

  2. Python学习笔记总结(二)函数和模块

    一.函数 函数的作用:可以计算出一个返回值,最大化代码重用,最小化代码冗余,流程的分解. 1.函数相关的语句和表达式 语句        例子 Calls        myfunc(‘diege', ...

  3. C++实验二——函数重载、函数模板、简单类的定义和实现

    一.实验过程 函数重载编程练习 实验要求:编写重载函数add(),实现对int型,double型,complex型数据的加法.在main函数中定义不同类型的数据,调用测试. 代码实现: 先是简单的体验 ...

  4. c++学习笔记之函数重载和模板理解

    1.函数重载: C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载(其英文是 overload).重载就是装载多种东西的意思,即同一个事物能完成不同功能. 所谓 ...

  5. 【C++初学者自学笔记三】哑元函数、缺省参数、内联函数(模块二,PS:需要用到重载函数)

    一,哑元函数:一个函数的参数只有类型没有名字的则这个参数称之为哑元.类似于void fun(int); 功能:1保持向前的兼容性,比方说我们需要做成一个成品,然后成品是会不断的更新第一代第二代,当我们 ...

  6. OpenCV学习笔记二:OpenCV模块一览

    注:本系列博客基于OpenCV 2.9.0.0 一,一览图: 二,模块: /* 基础库 */ 1,opencv_core(链接) ,opencv最基础的库.包含exception,point,rect ...

  7. 【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)

    这是我写的第一个博客关于C++的一些笔记,我不会写的太深奥,因为这样很多人会看不懂(我刚开始学C语言深受其害).个人觉得C++这门语言有些类似于C语言但是有些函数的用法还是有不一样的.C语言中的头文件 ...

  8. 初学者自学笔记-this的用法

    请注意:这是自学者的笔记,只是个人理解,并非技术分享,如有错误请指正. "this"的意思,简单而言,就是"这个",也就是"当前".谁调用它 ...

  9. python3精简笔记(二)——函数

    函数 下面的地址可以查看函数: https://docs.python.org/3/library/functions.html 也可以在交互式命令行通过help()查看函数的帮助信息. 如: > ...

随机推荐

  1. office2013激活工具,可以激活新版本office 2013

    耽误一上午没激活成功,最后还是找到了激活文件KMSpico v9.0.6.zip 链接:https://pan.baidu.com/s/1WEyJm8kVnqDONRJRHTRQiQ 提取码:4h45 ...

  2. stl队列

    队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插 ...

  3. oracle创建、删除索引等操作

    1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...

  4. Pascal 错误代码及含义

    DOS 错误代码:1无效DoS功能号 2文件末找到 3路径未找到 4打开文件过多 5禁止文件存取 6无效文件句柄 12无效文件存取代码 15无效驱动器号 16不能删除当前日录 17不能跨驱动器改文件名 ...

  5. 虚拟机安装archLinux+xfce桌面教程(更新时间2017-5-8)

    本教程转自http://blog.sina.com.cn/u/5692023517 感谢大神写出如此详细的教程并允许转载 本教程的目的:为了让新手安装arch不再那么难, 一个好的教程可以少走很多弯路 ...

  6. JEECG开发第一个菜单显示设备列表

    一.新建设备表(t_base_device) ; -- ---------------------------- -- Table structure for t_base_device -- --- ...

  7. 修改链接服务器 Rpc &Rpc Out

    USE [master] GO EXEC master.dbo.sp_serveroption @server=N'LinkName', @optname=N'rpc', @optvalue=N'tr ...

  8. SoapUI学习(1)- WebService基础

    转载:http://luyongxin88.blog.163.com/blog/static/92558072011320101454287/ WebService 它是一种构建应用程序的普遍模型,可 ...

  9. 清晰架构(Clean Architecture)的Go微服务: 程序设计

    我使用Go和gRPC创建了一个微服务,并将程序设计和编程的最佳实践应用于该项目. 我写了一系列关于在项目工作中做出的设计决策和取舍的文章,此篇是关于程序设计. 程序的设计遵循清晰架构(Clean Ar ...

  10. C:数组基础

    数组 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来--称为数组. 数组就是在内存中连续的相同类型的变量空间.同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的 ...