zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

C++ 函数 完全 攻略 重载 无师自通
2023-06-13 09:11:59 时间
有时候需要创建两个或多个执行相同操作的函数,但使用不同的形参集或不同数据类型的形参。

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

但是,C++ 允许函数重载,这意味着可以为多个函数分配相同的名称,只要它们的形参列表不同即可。下面的程序演示了该功能:


#include iostream 

#include iomanip 

using namespace std;

// Function prototypes

int 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 num2, int num3, int num4)

由于每个函数的形参数量不同,所以它们可以在同一个程序中使用。下面程序使用了 2 个函数,每一个都被命名为 CalcWeeklyPay,以确定员工的每周总收入。一个版本的函数使用一个 int 和一个 double 形参,而另一个版本则仅使用一个 double 形参。


#include iostream 

#include iomanip 

using namespace std;

//Function prototypes

char 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

22061.html

chtml