【C++初学者自学笔记二】函数重载(模块一)
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++初学者自学笔记二】函数重载(模块一)的更多相关文章
- Python:笔记(2)——函数与模块
Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...
- Python学习笔记总结(二)函数和模块
一.函数 函数的作用:可以计算出一个返回值,最大化代码重用,最小化代码冗余,流程的分解. 1.函数相关的语句和表达式 语句 例子 Calls myfunc(‘diege', ...
- C++实验二——函数重载、函数模板、简单类的定义和实现
一.实验过程 函数重载编程练习 实验要求:编写重载函数add(),实现对int型,double型,complex型数据的加法.在main函数中定义不同类型的数据,调用测试. 代码实现: 先是简单的体验 ...
- c++学习笔记之函数重载和模板理解
1.函数重载: C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载(其英文是 overload).重载就是装载多种东西的意思,即同一个事物能完成不同功能. 所谓 ...
- 【C++初学者自学笔记三】哑元函数、缺省参数、内联函数(模块二,PS:需要用到重载函数)
一,哑元函数:一个函数的参数只有类型没有名字的则这个参数称之为哑元.类似于void fun(int); 功能:1保持向前的兼容性,比方说我们需要做成一个成品,然后成品是会不断的更新第一代第二代,当我们 ...
- OpenCV学习笔记二:OpenCV模块一览
注:本系列博客基于OpenCV 2.9.0.0 一,一览图: 二,模块: /* 基础库 */ 1,opencv_core(链接) ,opencv最基础的库.包含exception,point,rect ...
- 【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)
这是我写的第一个博客关于C++的一些笔记,我不会写的太深奥,因为这样很多人会看不懂(我刚开始学C语言深受其害).个人觉得C++这门语言有些类似于C语言但是有些函数的用法还是有不一样的.C语言中的头文件 ...
- 初学者自学笔记-this的用法
请注意:这是自学者的笔记,只是个人理解,并非技术分享,如有错误请指正. "this"的意思,简单而言,就是"这个",也就是"当前".谁调用它 ...
- python3精简笔记(二)——函数
函数 下面的地址可以查看函数: https://docs.python.org/3/library/functions.html 也可以在交互式命令行通过help()查看函数的帮助信息. 如: > ...
随机推荐
- hadoop3.1.1 HA高可用分布式集群安装部署
1.环境介绍 涉及到软件下载地址:https://pan.baidu.com/s/1hpcXUSJe85EsU9ara48MsQ 服务器:CentOS 6.8 其中:2 台 namenode.3 台 ...
- xampp 配置多域名工程 解决 Access forbidden!
XAMPP虚拟主机配置,多域名绑定访问本地站点 XAMPP有时候你需要一些顶级域名访问方式来访问你本地的项目也就是虚拟主机配置,这时候就需要配置虚拟主机,给你的目录绑定一个域名,实现多域名绑定访问. ...
- PHP基础学习笔记3
一.检索表单信息 PHP 中的 $_GET 和 $_POST 变量用于检索表单中的信息,比如用户输入 提交的表单: <form action="welcome.php" me ...
- yum源文件
yum源文件 2017年11月22日 11:59:36 cakincqm 阅读数 1052更多 分类专栏: Linux 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附 ...
- Kmp算法浅谈
Kmp算法浅谈 一.Kmp算法思想 在主串和模式串进行匹配时,利用next数组不改变主串的匹配指针而是改变模式串的匹配指针,减少大量的重复匹配时间.在Kmp算法中,next数组的构建是整个Kmp算法的 ...
- jquery 根据值 设置radio选中
$("[name='selector'][value='value']").prop("checked", "checked");
- 安装和配置Windows系统虚拟机
1.打开虚拟机软件,点击新建虚拟机. 2.选择典型配置,点击下一步. 3.点击安装程序光盘映像文件,选择对应的映像文件,然后点击下一步.选择对应的密钥和版本,设置密码等. 4.创建虚拟机名字和存储位置 ...
- django之关系及查询,数据类型,约束,分页
目录 关系 数据列类型 数据类型的约束 分页 关系 1. 一对一(水平分表) 母表: UserInfo id name age 子表: private id salary sp 创建模型语句: cla ...
- 巨头环伺下,青云QingCloud的云计算之路危机重重
编辑 | 于斌 出品 | 于见(mpyujian) 随着互联网.科技行业的深入发展,国内云计算市场正越来越爆发出惊人的潜力,大量大.中.小型玩家开始不断发力,涌现出了一大批增速明显的行业玩家. 以BA ...
- webservice笔记
Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...