для присвоения класса мне нужно написать определение класса. Его называемый класс Employee, что-то действительно основное для моего первого класса c++.
Моя проблема заключается в первом forloop, когда я пытаюсь настроить зарплату на основе нового процента. После этого переменные внутри класса не меняются. Я не знаю, что может быть неправильно.
Код:
#include <iostream>
#include <string>
using namespace std;
class Employee
{
private:
int emplSalary;
string employeeName;
public:
Employee();
Employee(string name,int salary);
string getName();
int getSalary();
void newSalary(int percent);
void input();
void output();
};
Employee::Employee()
{
emplSalary=0;
employeeName="";
}
Employee::Employee(string name,int sal)
{
employeeName=name;
emplSalary =sal;
}
string Employee::getName()
{
return employeeName;
}
int Employee::getSalary()
{
return emplSalary;
}
void Employee::newSalary(int percent)
{
emplSalary= emplSalary *(1+(percent/100));
cout<<"I calculated"<<endl;
/*
if(percent < 0)
{
cout<<"Invalid Percentage";
cout<<"I calculated"<<endl;
}
else
{
emplSalary= emplSalary *(1+(percent/100));
cout<<"I calculated"<<endl;
}
*/
}
void Employee::input()
{
cout << "Enter Name: ";
cin>> employeeName;
cout<<"\n";
cout<<"Enter Salary: " ;
cin>>emplSalary;
cout<<"\n";
}
void Employee::output()
{
cout << "Name: " << employeeName <<" : "<< "Salary: " << emplSalary << endl;
cout<<"\n";
}
int main()
{
const int NUMBER_EMPLOYEE =1;
Employee employees[NUMBER_EMPLOYEE];
int percent;
cout<<"Welcome to Employee program. Enter Name and Salary when prompted."<<endl;
cout<<"\n";
cout<<"\n";
for (int i=0; i<NUMBER_EMPLOYEE; i++)
{
employees[i]=Employee();
employees[i].input();
cout<<"What percentage to raise the salary: ";
cin>>percent;
employees[i].newSalary(percent);
}
for (int i=0; i<NUMBER_EMPLOYEE; i++)
{
employees[i].output();
}
return EXIT_SUCCESS;
}
и выход:
Welcome to Employee program. Enter Name and Salary when prompted.
Enter Name:
Enter Salary:
What percentage to raise the salary: I calculated
Name: : Salary: 0
Проблема в этой строке:
emplSalary= emplSalary *(1+(percent/100));
Поскольку percent
- это int
, вы выполняете всю математическую задачу.
Предположим, что percent
равен 50. Самая внутренняя часть вашего выражения заканчивается 50/100
, что равно 0
в целочисленной математике. (Предполагалось, что результат равен 0.50
).
Чтобы исправить это, измените тип процента на double
.
В качестве альтернативы вы можете изменить 100 на 100.0 (что делает его double
):
emplSalary= emplSalary *(1+(percent/100.0));
emplSalary= emplSalary *(1+(percent/100));
Эта строка, если ваш percent
меньше 99, percent/100
будет равен нулю, почему он не влияет на ваш результат. Вы можете использовать double
тип для emplSalary and percent
.
emplSalary= emplSalary *(1+(percent/100));
Вы выполняете целочисленную арифметику там (emplSalaray
и percent
- оба типа int
). Это означает, что percent/100
(если процент больше 99) всегда оценивается emplSalary = emplSalary * 1
0. Таким образом, уравнение заканчивается emplSalary = emplSalary * 1
.
Во-первых, обратите внимание, что когда первоначальный оклад равен нулю (что происходит, когда вы пишете employees[i]=Employee()
а конструктор по умолчанию устанавливает зарплату в 0), рейзы любого процента всегда останутся равными нулю,
Во-вторых, обратите внимание, что деление int
на другое int
будет выполнять целочисленную арифметику, поэтому фактор получает усеченный. Таким образом, рейзы от 0 до 100 процентов будут округлены до 0%. Разделите на 100.0 вместо 100, чтобы решить эту проблему.
employees[i] = Employee();
совершенно ненужно.