【问题标题】:Creating an employee class创建员工类
【发布时间】:2014-05-19 03:35:24
【问题描述】:

我正在尝试编写以下内容:

1) 为一个名为 Employee 的类编写类定义,其中名称和薪水作为员工对象。该类包含两个成员函数:构造函数和允许程序为数据成员赋值的函数。

2) 向 Employee 类添加两个成员函数。一个成员函数应该允许任何使用员工对象的程序查看薪水数据成员的内容。另一个成员函数应该允许程序查看员工姓名数据成员的内容。

3) 向 Employee 类添加另一个成员函数。成员函数应根据使用该对象的程序提供的加薪百分比计算员工对象的新工资。在计算加薪之前,成员函数应验证加薪百分比是否大于或等于零。如果提高百分比小于零,则成员函数应显示错误消息。

4) 编写一个 main 函数,该函数将创建一个员工对象数组,分配 对象的值,显示所有对象的名称和当前薪水, 向用户询问加薪百分比,然后计算并显示新的工资 适用于所有对象。

我已尝试使用以下代码:

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;



class EMPLOYEE
{
public:
    EMPLOYEE();//
    EMPLOYEE(string name, int salary);//


public:
  string name;//name to be input
  int salary;//salary to be input

public:
int enter_values();
int output_values();
int NEW_SALARY( int percentage_raise);



};


//default constructor
EMPLOYEE::EMPLOYEE()
{
    name = "";
    salary = 0;
}

//constructor with name/salary variables
EMPLOYEE::EMPLOYEE(string NAME, int SALARY)
{
    name= NAME;
    salary= SALARY;
}

//name and salary to be input...
int EMPLOYEE::enter_values()
{ cout<<"Enter name and salary: ";
  cin>> name;
  cin>>salary;



}

//output

int EMPLOYEE::output_values()
{ cout<<"Name: "<<name<<endl;
  cout<<"Salary: "<<salary<<endl;


}


//
int EMPLOYEE::NEW_SALARY(int percentage_raise)
{

   EMPLOYEE updated_salary;

    if ( percentage_raise >= 0){salary= salary *(percentage_raise/100);


}

else if(percentage_raise< 0)
{ cout<<"Error Message"<<endl;

}

 return percentage_raise;
}



int main()
{
   EMPLOYEE employees[100];
   EMPLOYEE.NEW_SALARY();
   int percent= 0;
   int i;
   for(i =0 ;i<100 ; i++)
   { employees[i]=EMPLOYEE();
     employees[i].enter_values();
     employees[i].name;
     employees[i].salary;

     employees[i].output_values();


        cout<<"How much should the salary be raised by?"<<endl;

        cin>>percent;
        cout<<EMPLOYEE.name<<"'s new salary is "<<percentage_raise<<endl;
   }








}

但是,我无法访问我需要将信息存储到主函数中的数组的部分,也无法在程序提示用户时应用百分比提升。 我很确定我有我不知道的语法错误。我不是要求有人为我做所有事情,但我希望能引导我朝着正确的方向前进。我不太了解类以及如何将它们调用到程序的不同部分。感谢您的宝贵时间。

【问题讨论】:

  • 我会避免使用全大写标识符,它们通常用于预处理器定义,即我怀疑 EMPLOYEE 会扩展为某些代码。

标签: c++ arrays class object constructor


【解决方案1】:

你几乎所有东西都井井有条。

要解决的问题:

  1. 线

    if ( percentage_raise >= 0){salary= salary *(percentage_raise/100);
    

    salary 设置为zero,除非percentage_raise 大于100。这是因为表达式(percentage_raise/100) 将是一个整数除法,并且将计算为zero,除非pecentage_raise 大于100

    您可以使用以下方法修复它:

    if ( percentage_raise >= 0)
    {
       int raise = (salary*percentage_raise)/100;
       salary += raise;
    }
    
  2. 线

       EMPLOYEE.NEW_SALARY();
    

    将产生编译器错误,因为没有名为 EMPLOYEE 的对象。

    您可以安全地删除该行。它没有任何用途。

  3. 您在阅读输入后错过了设置加薪百分比的调用。你需要这条线

    employees[i].NEW_SALARY(percent);
    

    在您阅读 percent 之后立即。

  4. 以下行不正确。

    cout<<EMPLOYEE.name<<"'s new salary is "<<percentage_raise<<endl;
    

    因为没有名为EMPLOYEE 的对象。您可以将其替换为:

    cout<<employees[i].name<<"'s new salary is "<<employees[i].salary<<endl;
    

【讨论】:

    【解决方案2】:
    class Employee
    {
    public:
        Employee();
        int salary;
    };
    
    Employee::Employee() { salary = 10; }
    
    int main()
    {
        Employee joe;
    
        std::cout << "Joe Salary: " << joe.salary << std::endl;
    
        joe.salary = 15;
    
        std::cout << "Joe New Salary: " << joe.salary << std::endl;
    }
    

    通常,您会希望您的数据成员是私有的,并使用访问器方法来提供数据成员的值,这些数据成员也应该是私有的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多