C++函数重载完全攻略(无师自通)
有时候需要创建两个或多个执行相同操作的函数,但使用不同的形参集或不同数据类型的形参。
例如,有一个使用 double 形参的 square 函数。但是我们还需要一个 square 函数,该函数专门用于整数,并接收一个 int 作为其实参。这两个函数都会做同样的事情:返回其实参的平方值,唯一的区别是参与操作的数据类型。如果在同一程序中使用这两个函数,则可以为每个函数分配唯一的名称。例如,对于使用 int 的函数可以命名为 squarelnt,对于使用 double 的函数可以命名为 squareDouble。
但是,C++ 允许函数重载,这意味着可以为多个函数分配相同的名称,只要它们的形参列表不同即可。下面的程序演示了该功能:
请注意,函数的返回值不是签名的一部分。以下函数无法在同一程序中使用,因为它们的形参列表并无差异。
例如,有一个使用 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
int square(int number)
double square(double number)
square(int)
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)
#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
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算