6.函数重载

6.函数-函数重载


6.1 知识点

基本概念

重载概念:

  • 在同一作用域中(例如全局作用域、结构体或类中)。
  • 函数(方法)名相同。
  • 参数的数量不同。
  • 或者参数的数量相同,但参数的类型或顺序不同。

作用:

  • 命名一组功能相似的函数,减少函数名的数量,避免命名空间的污染。
  • 提升程序可读性。

通俗理解:

  • 同一作用域内,函数名相同,
    1. 参数数量不同,
    2. 参数类型不同,
    3. 参数顺序不同,
      就称为函数重载,或者称这样的函数为重载函数。

实例

声明

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. 重载和返回值类型无关,只和参数类型、个数、顺序有关。
  2. 调用时,程序会根据传入的参数类型自动判断使用哪一个重载。
// 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;

总结

  • 概念:同一个作用域中,函数名相同、参数的数量、类型、顺序不同的函数,称为重载函数。
  • 注意
    1. 和返回值无关。
    2. 可选参数会影响函数重载的区分,要注意。
  • 作用:用来处理不同参数的同一类型的逻辑处理。

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

×

喜欢就点赞,疼爱就打赏