函数重载(Function Overload):用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同。

1、重载规则

(1)函数名相同;

(2)参数个数不同,参数的类型不同,参数顺序不同,均可构成重载;

(3)返回值类型不同则不可以构成重载。

void func(int a);//OK
void func(char a);//OK
void func(char a,int b);//OK
void func(int a,char b);//OK
char func(int a);//与第一个函数有冲突

2、调用规则

(1)严格匹配,找到则调用;

(2)通过隐式转换寻求一个匹配,找到则调用;

#include <iostream>
using namespace std; void print1(double a)
{
cout << a << endl;
}
void print1(int a)
{
cout << a << endl;
}
int main(void)
{
print1();//1, print(int)
print1(1.1);//1.1, print(double)
print1('a');//,97, print(int)
print1(1.11f);//1.11 print(double) return ;
}

编译器调用重载函数的准则:

  1. 将所有同名函数作为候选者
  2. 尝试寻找可行的候选函数
  3. 精确匹配实参
  4. 通过默认参数能够匹配实参
  5. 通过默认类型转换匹配实参
  6. 匹配失败
  7. 最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
  8. 无法匹配所有候选者,函数未定义,编译失败。

3、重载底层实现(name mangling)

  C++利用 name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。

  实现原理:用 v c i f l d 表示 void char int float long double 及其引用。

void func(char a);//func_c(char a)
void func(char a,int b,double c);//func_cid(char a,int b,double c)

4、函数重载与函数默认参数

一个函数,不能既作重载,又作默认参数的函数。当你少写一个参数时,系统无法确认是重载还是默认参数。

#include <iostream>
using namespace std; int func(int a, int b, int c = )
{
return a*b*c;
} int func(int a, int b)
{
return a+b;
} int func(int a)
{
return a;
}
int main(void)
{
int c = ;
c = func(, );//error,存在二义性,调用失败,编译不能通过
printf("c=%d\n", c);
return ;
}

C++对C语言的拓展(4)—— 函数重载的更多相关文章

  1. ActionScript语言函数重载

    更新:你见过JavaScript支持重载吗,规范就是这么定义的.如果不是研究Java和Flex对象的Serialization,我也不会注意它. 距离写这篇文章已有8年了,时光匆匆啊,今天整理资料时看 ...

  2. Javascript函数重载,存在呢—还是存在呢?

    1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...

  3. C++对C语言的拓展(5)—— 函数重载和函数指针结合

    1.函数指针的介绍 函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关.举例如下: int add(int nLeft,int nRight);//函数定义 该函数类型为in ...

  4. C语言之字符串处理函数

    C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...

  5. Linux下C语言编程实现spwd函数

    Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

  6. 如何在C语言中调用Swift函数

    在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...

  7. C语言中的自定义函数

    C语言中可以使用系统函数也可以使用自己的函数,就是自定义函数 自定义函数分为四种 第一种:无参无返回值的 函数的声明 void sayH(); 函数的实现 void sayH(){ printf(&q ...

  8. C语言中返回字符串函数的四种实现方法 2015-05-17 15:00 23人阅读 评论(0) 收藏

    C语言中返回字符串函数的四种实现方法 分类: UNIX/LINUX C/C++ 2010-12-29 02:54 11954人阅读 评论(1) 收藏 举报 语言func存储 有四种方式: 1.使用堆空 ...

  9. C语言中返回字符串函数的四种实现方法

    转自C语言中返回字符串函数的四种实现方法 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 有四种方式: 1.使用堆空间,返回申请的堆地址,注意释放 2.函数参数传递指针,返回该指针 3.返回函 ...

随机推荐

  1. 深入浅出Node.js(下)

    (五):Node.js的异步实现 专栏的第五篇文章<Node.js的异步实现>.之前介绍了Node.js的事件机制,也许读者对此尚会觉得意犹未尽,因为仅仅只是简单的事件机制,并不能道尽No ...

  2. 常用的机器学习&数据挖掘知识点

    Basis(基础):MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE ...

  3. 【HackerRank】 Chocolate Feast

    Little Bob loves chocolates, and goes to the store with $N money in his pocket. The price of each ch ...

  4. linux 音频驱动

    转:https://wenku.baidu.com/view/7394e16d7e21af45b307a8dc.html?pn=51 linux_sound_alsa_ALSA体系SOC子系统中数据流 ...

  5. 在vim下按ctrl+s后界面卡住

    用惯了window编辑器的我们,在使用linux vim编辑器时会不会遇到这个问题:在编辑时总是会不小心按下Ctrl+S,然后整个终端都没有反应了?其实在Linux下 Ctrl+S是有特殊的用途的,不 ...

  6. 优美的英文诗歌Beautiful English Poetry

    <When you are old>——<当你老了> --- William Butler Yeats ——威廉·巴特勒·叶芝When you are old and grey ...

  7. StringTemplateLoader的用法

    作为一个模板框架,freemarker的功能还是很强大的.在模板处理方面,freemarker有多种形式,最常见的方式是将模板文件放在一个统一的文件夹下面,如下形式:Configuration cfg ...

  8. 提高MySQL效率与性能的技巧

    为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存 ...

  9. 【codevs2011】最小距离之和 [LNOI2013](Floyd)

    题目网址:http://codevs.cn/problem/2011/ 题目大意:有一个图,每次删一条边(可以重复删),求每次删边之后所有点对的最短距离之和. 看了一眼题目,顿时发现了O(n^4)的暴 ...

  10. springcloud一些概念知识

    1.Eureka 1)Eureka服务治理体系支持跨平台 2)三个核心概念:服务注册中心.服务提供者以及服务消费者 3)服务续约:注册完服务之后,服务提供者会维护一个心跳来不停的告诉Eureka Se ...