一、本章重点
- 什么是函数重载?
- 函数重载的条件
- 为什么有函数重载?
- 为什么C不支持函数重载,C++确能支持函数重载?
- extern “C”
二、函数重载
2.1函数重载的概念
简单来说,C++允许同一作用域中出现函数名相同,参数不同,功能相似的函数,而这些函数就构成函数重载。
void Swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void Swap(double* a, double* b) { double temp = *a; *a = *b; *b = temp; } //这两个函数就构成函数重载
2.2函数重载的条件
第一要满足:函数名相同
第二要满足:参数不同,具体表现在参数类型的顺序、参数的个数、参数的类型。
参数的类型不同的函数重载
void Pt(int a) { cout << a << endl; } void Pt(double a) { cout << a << endl; } //类型不同
参数的个数不同的函数重载
int Add(int a, int b, int c) { return a + b + c; } int Add(int a, int b) { return a + b; } //个数不同
参数类型的顺序不同
void Func(int a, double b) { cout << a << b << endl; } void Func(double a, int b) { cout << a << b << endl; } //顺序不同
2.3为什么有函数重载?
就是问函数重载到底能干嘛?c语言不支持同一作用域存在同名函数,那么我们修改一下函数名不就行了吗?函数重载真正能体现价值的地方到底在哪呢?
第一:书写函数名方便。
比如,我们要写两个交换函数,第一个是交换两个整形,第二个是交换两个浮点型,那么你只需要都取Swap即可,不需要写成Swapi、Swapd,如果参数复杂呢?你又要写成什么呢?
到不如直接写成Swap,然后传不同的参数,编译器会自动匹配最符合的函数。
第二:类中构造函数的实现也依靠函数重载
构造函数是同名的成员函数,它一般被划分为:有参构造、无参构造、拷贝构造,它们构成函数重载。
第三:模板的底层实现也依靠函数重载
模板的其实就是让编译器就为你创建重载函数,比如Swap(const T& a,const T&b)
当你传两个整形给a和b时,编译器会自动生成Swap(int* a,int*