Классы C ++. Значения внутри класса не обновляются

0

для присвоения класса мне нужно написать определение класса. Его называемый класс 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
Теги:
class

4 ответа

1
Лучший ответ

Проблема в этой строке:

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));
  • 1
    Спасибо, что действительно исправили проблему. : D
1
emplSalary= emplSalary *(1+(percent/100));

Эта строка, если ваш percent меньше 99, percent/100 будет равен нулю, почему он не влияет на ваш результат. Вы можете использовать double тип для emplSalary and percent.

1
emplSalary= emplSalary *(1+(percent/100));

Вы выполняете целочисленную арифметику там (emplSalaray и percent - оба типа int). Это означает, что percent/100 (если процент больше 99) всегда оценивается emplSalary = emplSalary * 1 0. Таким образом, уравнение заканчивается emplSalary = emplSalary * 1.

0

Во-первых, обратите внимание, что когда первоначальный оклад равен нулю (что происходит, когда вы пишете employees[i]=Employee() а конструктор по умолчанию устанавливает зарплату в 0), рейзы любого процента всегда останутся равными нулю,

Во-вторых, обратите внимание, что деление int на другое int будет выполнять целочисленную арифметику, поэтому фактор получает усеченный. Таким образом, рейзы от 0 до 100 процентов будут округлены до 0%. Разделите на 100.0 вместо 100, чтобы решить эту проблему.

  • 0
    Не говоря уже о том, что employees[i] = Employee(); совершенно ненужно.
  • 0
    Оо ты абсолютно прав. XD это довольно избыточно, так как я прошу ввода.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню