Я прочитал несколько ранее задаваемых вопросов по этой теме, но не могу найти ответ, который я ищу. Когда я запускаю программу, я не получаю никаких ошибок, но я получаю много данных об мусоре. Я знаю, это потому, что я не передаю параметры правильно, но я новичок в C++ и, в частности, как правильно использовать указатели. Чтобы сделать его простым: я передаю объект сотрудника через PrintCheck()
, который вызывает функцию CalcSalary()
, которая должна использовать GetHours()
и GetWage()
для доступа к данным элемента для выполнения расчетов и возврата правильного salary
. Поблагодарили бы за любые объяснения, почему я генерирую данные мусора!Передача объектов класса в функциональные параметры C++
У меня есть класс:
class Employee
{
private:
int employeeNumber;
string name;
string streetAddress;
string phoneNumber;
double hourlyWage;
double hoursWorkedperWeek;
public:
Employee(void);
Employee(int, string, string, string, double, double);
int GetEmployeeNum() const;
void SetEmployeeNum(int);
string GetName() const;
void SetName(string);
string GetAddress() const;
void SetAddress(string);
string GetPhone() const;
void SetPhone(string);
double GetWage() const;
void SetWage(double);
double GetHours() const;
void SetHours(double);
double CalcPay(double, double);
};
У меня также есть функция, которая должна взаимодействовать с классом:
void PrintCheck(Employee&);
Моя главная функция выглядит следующим образом:
void main()
{
Employee joe(1, "Joe Blo", "125 Cool St.", "555 555 5555", 10.00, 45); //create employee 1
Employee jane(2, "Jane Doe", "521 Dumb St.", "1 800 555 5555", 12.50, 30); //create employee 2
PrintCheck(joe); //print check
}
Функция printcheck выглядит следующим образом:
void PrintCheck(Employee& a)
{
cout << "Pay to the order of " << a.GetName() << "...................................";
cout << a.CalcPay(a.GetWage(), a.GetHours()) << endl;
cout << "Hours worked: " << a.GetHours() << endl;
cout << "Hourly wage: " << a.GetWage() << endl;
}
функция Calcpay является:
double Employee::CalcPay(double h, double w)
{
double salary = 0;
int OT = 40;
double timeandahalf = 1.5;
double STATE = .075;
double FED = .20;
if (h > OT) // overtime
{
salary = h * (w * timeandahalf); // calc time and a half
salary = salary * STATE; // calc state deductions
salary = salary * FED; // calc federal deductions
}
else
{
salary = h * w; // calc salary
salary = salary * STATE; // calc state deductions
salary = salary * FED; // calc federal deductions
}
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(PRECISION);
return salary;
}
Мои "получить" функции все следуют этому шаблону:
int Employee::GetEmployeeNum() const
{
return employeeNumber;
}
Мой ожидаемый результат будет:
Pay to the order of: Joe Blo............ $salary.
Hours worked: $hours.
Hourly wage: $wage.
Что я получил:
Pay to the order of: ........................ 128509280503000000000000000000000000000.00 (this number is long, but I didn't feel like typing them all)
Hours worked: -9723636237 (same, just tons of bs numbers)
Hourly wage: (the exact same number as above)
Мой конструктор класса:
Employee::Employee(int en, string n, string a, string p, double w, double h)
{
int employeeNumber = en;
string name = n;
string streetAddress = a;
string phoneNumber = p;
double hourlyWage = w;
double hoursWorkedperWeek = h;
}
Employee::Employee()
{
}
Почему бы вам не включить то, что вы ожидали, и то, что вы действительно получили в своем вопросе? – greatwolf
Как выглядит реализация для вашего конструктора 'Employee (int, string, string, string, double, double)'? –
Смотрите на свой язык. Я отредактирую это для вас на этот раз, но в будущем мода может удалить ваш пост, даже не моргая. –