6.函数-函数重载
6.1 知识点
基本概念
重载概念:
- 在同一作用域中(例如全局作用域、结构体或类中)。
- 函数(方法)名相同。
- 参数的数量不同。
- 或者参数的数量相同,但参数的类型或顺序不同。
作用:
- 命名一组功能相似的函数,减少函数名的数量,避免命名空间的污染。
- 提升程序可读性。
通俗理解:
- 同一作用域内,函数名相同,
- 参数数量不同,
- 参数类型不同,
- 参数顺序不同,
就称为函数重载,或者称这样的函数为重载函数。
实例
声明
int calcSum(int a, int b);
int calcSum(int d, int e, int c);
// 在使用重载函数时,一定要记住先声明
// 如果忘记声明,可能调用的函数并不会是你想象中的那个函数,而是参数数量相同的另一个重载函数
float calcSum(float f1, float f2);
double calcSum(float f, double d);
double calcSum(double d, float f);
// 这种重载会出现问题,可选参数会让编译器在调用该函数时分不清用哪个
// 导致报错
int test(int a);
int test(int a, int b = 99);
定义
要点:
- 重载和返回值类型无关,只和参数类型、个数、顺序有关。
- 调用时,程序会根据传入的参数类型自动判断使用哪一个重载。
// 1. 参数数量不同
int calcSum(int a, int b)
{
return a + b;
}
// 2. 参数数量相同,类型不同
float calcSum(float f1, float f2)
{
return f1 + f2;
}
double calcSum(float f, double d)
{
return f + d;
}
// 3. 参数数量相同,顺序不同
double calcSum(double d, float f)
{
return f + d;
}
// 注意:默认参数(可选参数)会影响重载
// 编译器会不清楚该选择哪个重载
int test(int a)
{
return a;
}
int test(int a, int b)
{
return a + b;
}
使用
cout << calcSum(1, 2) << endl; // 输出 3
cout << calcSum(3, 23, 4) << endl; // 输出 30
cout << calcSum(1.5f, 2.5f) << endl; // 输出 4
cout << calcSum(1.5f, 2.5) << endl; // 输出 4
cout << calcSum(1.5, 2.5f) << endl; // 输出 4
// 编译报错:无法匹配合适的重载
// cout << test(1) << endl;
总结
- 概念:同一个作用域中,函数名相同、参数的数量、类型、顺序不同的函数,称为重载函数。
- 注意:
- 和返回值无关。
- 可选参数会影响函数重载的区分,要注意。
- 作用:用来处理不同参数的同一类型的逻辑处理。
6.2 知识点代码
Lesson06_函数重载.cpp
#include <iostream>
using namespace std;
int calcSum(int a, int b);
int calcSum(int d, int e, int c);
//在使用重载函数时,一定要记住先声明
//如果忘记声明,可能调用的函数并不会是你想象中的那个函数,而是参数数量相同的另一个重载函数
float calcSum(float f1, float f2);
double calcSum(float f, double d);
double calcSum(double d, float f);
//这种重载 会出现问题 可选参数会让编译器在调用该函数时 分不清用谁
//导致报错
int test(int a);
int test(int a, int b = 99);
int main()
{
std::cout << "函数重载\n";
cout << calcSum(1, 2) << endl;//3
cout << calcSum(3, 23, 4) << endl;//30
cout << calcSum(1.5f, 2.5f) << endl;//4
cout << calcSum(1.5f, 2.5) << endl;//4
cout << calcSum(1.5, 2.5f) << endl;//4
//cout << test(1) << endl;//编译报错
}
#pragma region 知识点一 基本概念
//重载概念
//在同一作用域中(比如全局作用域,以后学的结构体、类中)
//函数(方法)名相同
//参数的数量不同
//或者
//参数的数量相同,但参数的类型或顺序不同
//作用:
//1.命名一组功能相似的函数,减少函数名的数量,避免命名空间的污染
//2.提升程序可读性
//说人话:
//同一作用域内
//函数名相同
//1.参数数量不同
//2.参数类型不同
//3.参数顺序不同
//就称为函数重载,或者称这样的函数为重载函数
#pragma endregion
#pragma region 知识点二 实例
//要点:
//1.重载和返回值类型无关,只和参数类型,个数,顺序有关
//2.调用时 程序会自己根据传入的参数类型判断使用哪一个重载
int calcSum(int a, int b)
{
return a + b;
}
//1.参数数量不同
int calcSum(int d, int e, int c)
{
return d + e + c;
}
//2.数量相同 类型不同
float calcSum(float f1, float f2)
{
return f1 + f2;
}
double calcSum(float f, double d)
{
return f + d;
}
//3.数量相同 顺序不同
double calcSum(double d, float f)
{
return f + d;
}
//注意:默认参数(可选参数)会影响重载
// 编译器会不清楚该选择哪个重载
int test(int a)
{
return a;
}
int test(int a, int b)
{
return a + b;
}
#pragma endregion
#pragma region 总结
//概念:同一个作用域中,函数名相同、参数的数量、类型、顺序不同的函数 称为 重载函数
//注意:1.和返回值无关 2.可选参数会影响函数重载的分别 要注意
//作用:用来处理不同参数的同一类型的逻辑处理
#pragma endregion
6.3 练习题
请重载一个函数
让其可以比较两个int或两个float或两个double的大小并返回较大的那个值
声明
int getMax(int a, int b);
float getMax(float a, float b);
double getMax(double a, double b);
定义
// 得到较大的值
int getMax(int a, int b)
{
return a > b ? a : b;
}
float getMax(float a, float b)
{
return a > b ? a : b;
}
double getMax(double a, double b)
{
return a > b ? a : b;
}
使用
cout << getMax(3, 4) << endl; // 4
cout << getMax(3.5f, 4.0f) << endl; // 4
cout << getMax(3.5, 4.8) << endl; // 4.8
假设有一个重载函数 calculate,可以用于计算矩形的面积和立方体的体积
声明
float calculate(float l, float w);
float calculate(float l, float w, float h);
定义
float calculate(float l, float w)
{
return l * w;
}
float calculate(float l, float w, float h)
{
return l * w * h;
}
使用
cout << calculate(4, 5) << endl; // 20
cout << calculate(4, 5, 3) << endl; // 60
6.4 练习题代码
Lesson06_练习题.cpp
#include <iostream>
using namespace std;
int getMax(int a, int b);
float getMax(float a, float b);
double getMax(double a, double b);
float calculate(float l, float w);
float calculate(float l, float w, float h);
int main()
{
std::cout << "函数重载练习题\n";
cout << getMax(3, 4) << endl;//4
cout << getMax(3.5f, 4.0f) << endl;//4
cout << getMax(3.5, 4.8) << endl;//4.8
cout << calculate(4, 5) << endl;//20
cout << calculate(4, 5, 3) << endl;//60
}
#pragma region 练习题一
//请重载一个函数
//让其可以比较两个int或两个float或两个double的大小
//并返回较大的那个值
//得到较大的值
int getMax(int a, int b)
{
return a > b ? a : b;
}
float getMax(float a, float b)
{
return a > b ? a : b;
}
double getMax(double a, double b)
{
return a > b ? a : b;
}
#pragma endregion
#pragma region 练习题二
//假设有一个重载函数 calculate,可以用于计算矩形的面积和立方体的体积
//面积:长*宽
//体积:长*宽*高
float calculate(float l, float w)
{
return l * w;
}
float calculate(float l, float w, float h)
{
return l * w * h;
}
#pragma endregion
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com