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
int square(int number)
square(int) 请注意,函数的返回值不是签名的一部分。以下函数无法在同一程序中使用,因为它们的形参列表并无差异。 int square(int number) { return number * number; } double square (int number) //错误!形参列表必须不同 { return number * number; }当有类似函数使用不同数量的形参时,重载也很方便。例如,假设有一个程序包含的函数可以返回整数和。其中一个函数返回 2 个整数的和,另一个返回 3 个整数的和,还有一个返回 4 个整数的和。以下是它们的函数头:
int sum(int num1,int num2) #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 ofn"; 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |