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. TinyXML解析

    TinyXML介绍 最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方 ...

  2. HttpServer性能比较

    在自己的本子上随便测了下几款HttpServer,环境信息就不贴出来了,主要是比对下差距. 测试内容是输出 text/plain 的 hello, world. 先说结论:Netty > Joo ...

  3. Go流程结构(for)

    一.程序的流程结构 程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构. 顺序结构:代码从上向下逐行的执行 选择结构:条件满足,某些代码才会被执行.0-1次 if语句,switch语句 循环结 ...

  4. iOS开发之使用 infer静态代码扫描工具

    infer是Facebook 的 Infer 是一个静态分析工具.可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使用 infer 检测应用,可以将严重的 ...

  5. docker容器虚拟化网络

    linux内核支持六种名称空间 1.主机名和域名  ------->  UTS 2.用户  -------->  User 3.文件挂载系统   ------->  mount 4. ...

  6. Spring Boot整合EhCache

    本文讲解Spring Boot与EhCache的整合. 1 EhCache简介 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认CacheProvid ...

  7. Linux创建连接命令 ln -s创建软连接

    ln -s 是linux中一个非常重要命令,一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s, 具体用法是:ln -s 源文件 目标文件. 当 我们需要在 ...

  8. 【C语言】函数调用的简单例子

    #include<stdio.h> void p1() { printf("******************\n"); } void p2() { printf(& ...

  9. Shiro入门学习与实战(一)

    一.概述 1.Shiro是什么? Apache Shiro是java 的一个安全框架,主要提供:认证.授权.加密.会话管理.与Web集成.缓存等功能,其不依赖于Spring即可使用: Spring S ...

  10. Unix系统级I/O

    在Unix系统中,一且皆为文件.一个Linux文件就是一个字符序列,并且所有的I/O设备都被模型化成了文件.而所有的输入输出都被当作对对应文件的读和写.Linux提供了一组简单.低级的接口,使得所有的 ...