我正在开发一个项目,该项目通过使用重载来计算员工的收入,并且还按值传递+按引用传递。我需要至少使用程序中的一个函数来演示按值传递;以及至少一个用于演示使用引用参数进行引用传递的函数。这是我到目前为止得到的:
#include <iostream>
#include "Grosspay.h"
#include "iomanip"
using namespace std;
double income(double hours, double payrate)
{
double grosspay = 0;
double federaltax = .10;
double statetax = .05;
double totaltax;
double netpay;
if (hours <= 40)
{
grosspay = payrate * hours;
}if (hours > 40 && hours <= 50)
{
grosspay = (payrate * 40) + ((hours - 40) * payrate * 1.5);
}
if (hours > 50)
{
grosspay = (payrate * 40) + (10 * payrate * 1.5) + ((hours - 50) * payrate * 2);
}
cout << "Grosspay weekly is: " << grosspay << endl;
federaltax = grosspay * .10;
cout << "Federal Tax is: " << federaltax << endl;
statetax = grosspay * .05;
cout << "State Tax is: " << statetax << endl;
totaltax = federaltax + statetax;
cout << "Total tax is: " << totaltax << endl;
netpay = grosspay - totaltax;
return (netpay);
}
double income(const double &year)
{
double grosspay;
double federaltax = .10;
double statetax = .05;
double totaltax;
double netpay;
grosspay = year / 52;
cout << "Grosspay weekly is: " << grosspay << endl;
federaltax = grosspay * .10;
cout << "Federal Tax is: " << federaltax << endl;
statetax = grosspay * .05;
cout << "State Tax is: " << statetax << endl;
totaltax = federaltax + statetax;
cout << "Total Tax is: " << totaltax << endl;
netpay = grosspay - totaltax;
return (netpay);
}
void Grosspay::determineGrosspay()
{
cout << "Enter 1 - Calculate payroll for hourly employee" << endl;
cout << "Enter 2 - Calculate payroll for salary employee" << endl;
cout << "Enter 3 - Exit" << endl;
cout << "Federal Tax is 10% of Grosspay" << endl;
cout << "State Tax is 5% of Grosspay" << endl;
while (choice != 3)
{
cout << "\nEnter your choice: " << endl;
cin >> choice;
switch (choice)
{
case 1:
cout << "Enter employee ID: " << endl;
cin >> ID;
cout << "Enter hours: " << endl;
cin >> hours;
cout << "Enter payrate: " << endl;
cin >> payrate;
cout << "Employee ID: " << ID << endl;
cout << setprecision(2) << fixed;
cout << "The net pay for hourly employee: " << income(hours, payrate) << endl;
break;
case 2:
cout << "Enter employee ID: " << endl;
cin >> ID;
cout << "Enter salary: " << endl;
cin >> year;
cout << "Employee ID: " << ID << endl;
cout << setprecision(2) << fixed;
cout << "The net pay for salaried employee: " << income(year) << endl;
break;
case 3:
cout << "Exited program" << endl;
break;
default:
cout << "Please try again!" << endl;
break;
}
}
}
这里的一位天才告诉我,我需要把double income(const double &year)
用于通过引用传递。但我不太确定是什么造成了差异!我仍然有相同的输出。谁能帮帮我吗?
以下是一些指导原则:
- 如果值可以放入处理器的寄存器中,则按值传递,并且
该参数不会被修改。
- 如果函数将修改参数,则按引用传递。
- 如果对象大于则传递常量引用
处理器的寄存器和参数不会被修改。
通过常量引用传递类型,例如double, float, int, char,
and bool
没有意义,因为这些通常适合处理器的字大小。编译器将尝试将这些值传递到寄存器中。这些 POD 类型没有额外的复制成本。因此,按值传递(需要更少的输入)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)