C++函数重载完全攻略(无师自通)

C++函数重载完全攻略(无师自通),第1张

概述有时候需要创建两个或多个执行相同 *** 作的函数,但使用不同的形参集或不同数据类型的形参。 例如,有一个使用 double 形参的 square 函数。但是我们还需要一个 square 函数,该函数专门 有时候需要创建两个或多个执行相同 *** 作的函数,但使用不同的形参集或不同数据类型的形参。

例如,有一个使用 double 形参的 square 函数。但是我们还需要一个 square 函数,该函数专门用于整数,并接收一个 int 作为其实参。这两个函数都会做同样的事情:返回其实参的平方值,唯一的区别是参与 *** 作的数据类型。如果在同一程序中使用这两个函数,则可以为每个函数分配唯一的名称。例如,对于使用 int 的函数可以命名为 squarelnt,对于使用 double 的函数可以命名为 squareDouble。

但是,C++ 允许函数重载,这意味着可以为多个函数分配相同的名称,只要它们的形参列表不同即可。下面的程序演示了该功能:
#include <iostream>#include <iomanip>using namespace std;// Function prototypesint square(int);double square(double);int main(){    int userInt;    double userReal;    // Get an int and a double    cout << "Enter an integer and a floating-point value: ";    cin >> userInt >> userReal;       // display their squares    cout << "Here are their squares:";    cout << fixed << showpoint << setprecision(2);    cout << square(userInt) << " and " << square(userReal) << endl;    return 0;}int square (int number){    return number * number;}double square(double number){    return number * number;}
程序输出结果:

Enter an integer and a floating-point value: 12 4.2
Here are their squares: 144 and 17.64

以下是程序中使用的 square 函数的函数头:

int square(int number)
double square(double number)

在 C++ 中,每个函数都有一个签名。函数签名是函数的名称和函数形参的数据类型顺序。因此,上面程序中的 square 函数具有以下签名:

square(int)
square(double)

当调用重载函数时,C++ 将使用函数签名将其与具有相同名称的其他函数区分开来。在上面程序中,当 int 实参被传递给 square 时,调用具有 int 形参的函数版本。同样,当 double 实参被传递给 square 时,将调用带有 double 形参的版本。

请注意,函数的返回值不是签名的一部分。以下函数无法在同一程序中使用,因为它们的形参列表并无差异。
int square(int number){    return number * number;}double square (int number) //错误!形参列表必须不同{    return number * number;}
当有类似函数使用不同数量的形参时,重载也很方便。例如,假设有一个程序包含的函数可以返回整数和。其中一个函数返回 2 个整数的和,另一个返回 3 个整数的和,还有一个返回 4 个整数的和。以下是它们的函数头:

int sum(int num1,int num2)
int sum(int num1,int num2,int num3)
int sum(int num1,int num3,int num4)

由于每个函数的形参数量不同,所以它们可以在同一个程序中使用。下面程序使用了 2 个函数,每一个都被命名为 CalcWeeklyPay,以确定员工的每周总收入。一个版本的函数使用一个 int 和一个 double 形参,而另一个版本则仅使用一个 double 形参。
#include <iostream>#include <iomanip>using namespace std;//Function prototypeschar getChoice ();double calcWeeklyPay(int,double);double calcWeeklyPay(double);int main(){    char selection; // Menu selection    int worked; // Weekly hours worked    double rate,// Hourly pay rate    yearly; // Annual salary       // Set numeric output formatting    cout << fixed << showpoint << setprecision(2);    //display the menu and get a selection    cout << "Do you want to calculate the weekly pay of\n";    cout << "(H) an hourly-wage employee,or \n";    cout << "(S) a salarIEd employee? ";    selection = getChoice ();    // Process the menu selection    switch (selection)    {        //Hourly employee        case 'H':        case 'h':            cout << "How many hours were worked? ";            cin >> worked;            cout << "What is the hourly pay rate? ";            cin >> rate;            cout << "The gross weekly pay is $";            cout << calcWeeklyPay(worked,rate) << endl;            break;        //SalarIEd employee        case 'S' :        case 's' :            cout << "What is the annual salary? ";            cin >> yearly;            cout << "The gross weekly pay is $";            cout << calcWeeklyPay(yearly) << endl;    }    return 0;}char getChoice(){    char letter; // Holds user1s letter choice    // Get the user's choice    cin >> letter;    // ValIDate the choice    while (letter != 'H' && letter != 'h' && letter != 'S' && letter != 's')    {        cout << "Enter H or S:";        cin >> letter;    }    // Return the choice    return letter;}double calcWeeklyPay(int hours,double payRate){    return hours * payRate;}double calcWeeklyPay(double annSalary){    return annSalary / 52.0;}
程序输出结果:

Do you want to calculate the weekly pay of
(H) an hourly-wage employee,or
(S) a salarIEd employee? H
How many hours were worked? 40
What is the hourly pay rate? 18.50
The gross weekly pay is $740.00

总结

以上是内存溢出为你收集整理的C++函数重载完全攻略(无师自通)全部内容,希望文章能够帮你解决C++函数重载完全攻略(无师自通)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存