【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()查看函数的帮助信息. 如: > ...
随机推荐
- QQ发起聊天
QQ推广 网址: http://shang.qq.com/v3/widget.html 一键加群 实例: <a target="_blank" href="//sh ...
- JQuery中的DOM操作(转载)
原文链接:http://www.cnblogs.com/ILYljhl/archive/2013/07/10/3182414.html jQuery封装了大量DOM操作的API,极大提高了操作DOM节 ...
- Git - git bash 在 windows 下创建软连接
1. 概述 使用 git bash 在 windows 下创建软连接 或者叫 快捷方式 感谢 Tony 老师的帮助 Tony 的技术笔记 Windows 使用 ln -s 创建软链接 2. 问题 需求 ...
- 查询数据操作:distinct
1.作用:distinct 去除重复记录.重复记录,指的是字段值,都相同的记录,而不是部分字段值相同的记录 与之相对的是all,表示所有.在MySQL中默认就是all. 2.例子: select ch ...
- 201771010135 杨蓉庆《面对对象程序设计(java)》第十七周学习总结
1.实验目的与要求 (1) 掌握线程同步的概念及实现技术: (2) 线程综合编程练习 一.理论知识 ⚫ 线程同步 (1)多线程并发运行不确定性问题解决方案:引入线 程同步机制,使得另一线程要使用该方法 ...
- JavaScript ES5类 原型 原型链 组合、原型、寄生式继承
ES5类 原型 原型链 继承 JavaScript中,原型是相对于构造函数(类)的叫法(或者说概念),原型链是相对于构造函数(类)的实例对象的叫法. 对于JavaScript对象,如果在对象自身上找 ...
- 树莓派实现SIM868 ppp拨号上网
环境:raspbian-stretch(2018-06-27) 树莓派:3代B型 SIM868模块具有GPRS数据传输功能(2G网络),但是模块是通过AT指令控制的,在树莓派上用AT指令控制会非常不方 ...
- debug assertion failed问题解决
运行过程中出现上述问题,后来发现是vector越界问题....解决办法:不要越界就好了...
- 【PAT甲级】1088 Rational Arithmetic (20 分)
题意: 输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式.小数需要用"("和")"括起来,分母为0的话输出"Inf&qu ...
- 【C语言】找出1000以内所有的素数
#include<stdio.h> int main() { int i, j, t; ; i <= ; i++) { ; ; j < i; j++) { ) { t = ; ...