C++:阶级问题

C++: Class Issues

本文关键字:问题 C++      更新时间:2023-10-16

我试图让我的类执行以下操作...

  1. EmployeeHandler :将m_employeeCount初始化为零。

  2. AddEmployee :由菜单选项 1 调用。显示"新员工"。提示用户员工的名字、姓氏和工资率,一次一个。使用员工设置添加员工m_lstEmployee。显示"已添加员工m_employeeCount"。增量m_employeeCount。

  3. EmployeeSelection:按索引显示雇员列表;提示用户输入雇员索引并返回索引。

  4. EditEmployee :由菜单选项 2 调用。使用员工选择获取要编辑的员工。验证索引是否有效,如果无效,则显示错误消息。 用途员工。输出以显示所选员工的当前信息。提示用户员工的新名字、姓氏和工资率,一次一个。使用 Employee.Setup 来在m_lstEmployee中更改员工的信息。显示"** 员工索引已更新",其中索引是用户选择的索引。

  5. LayoffEmployee :通过菜单选项 3 调用。使用员工选择获取员工裁员。使用"员工输出"显示所选员工的名字、姓氏姓名和工资率。使用"员工。裁员"来裁员。 显示"员工"指数下岗",其中指数是裁员指数。

  6. DisplayEmployeeList :由菜单选项 4 调用。显示"员工"。然后使用Employee.Output 显示每个员工记录的内容如下,"[1] David Johnson,工资:5.00 美元(现任员工(",一位前员工记录了这样的事情,"[2]大卫·约翰逊,支付:5.00 美元(前雇员(",括号中的数字是m_lstEmployee的员工指数。

  7. GetEmployee:以m_lstEmployee为单位返回所选员工记录的地址。

  8. GetEmployeeCount :返回m_employeeCount中的员工数。

到目前为止,我有...

#ifndef _EMPLOYEEHANDLER
#define _EMPLOYEEHANDLER
#include "Employee.h"
class EmployeeHandler
{
    public:
    EmployeeHandler()
    {
        m_employeeCount = 0; //undefined?
    };
    void AddEmployee()
        {
            string firstName;
            string lastName;
            float payRate;
            cout<<"NEW EMPLOYEE"<<endl;
            cout<<"First Name:"<<endl;
            cin>>firstName;
            cout<<"Last Name:"<<endl;
            cin>>lastName;
            cout<<"Pay Rate:"<<endl;
            cin>>payRate;
            Employee.Setup(firstName,lastName,payRate); //Problem here
            cout<<"**Employee m_employeeCount added"<<endl;
            m_employeeCount+=1; //m_employeeCount undefined?
        }
    void EditEmployee()
        {
            int indexEdit;
            string newFirst;
            string newLast;
            float newPay;
            cout<<"Which employee would you like to edit"<<endl;
            cin>>indexEdit;
            EmployeeSelection(indexEdit); //undefined?
            Employee.Output(); //
            cout<<"Employee new first name:"<<endl;
            cin>>newFirst;
            cout<<"Employee new last name:"<<endl;
            cin>>newLast;
            cout<<"Employee new pay rate:"<<endl;
            cin>>newPay;
            Employee.Setup(newFirst,newLast,newPay); ///
            cout<<"** Employee index updated"<<endl;
        }

    void LayoffEmployee()
        {
            EmployeeSelection();
            Employee.Output(EmployeeSelection); //Problems here
            Employee.LayOff(EmployeeSelection);
            cout<<"Employee laid off"<<endl;
        }
    void DisplayEmployeeList()
        {
            cout<<"EMPLOYEES"<<endl;
            for (int i=0; i<50; i++)
                cout<<[i]<<Employee.Output(m_1stEmployee)<<endl; //
        }
    int EmployeeSelection()
        {
            int indexNumber;
            for (int i= 0; i <50; i++)
                cout<<[i]m_1stEmployee<<endl; //
            cout<<"Which Employee Index would you like to select?"<<endl;
            cin>>indexNumber;
            for (int i = 0; i <50; i++)
                if ([i]=indexNumber) //
                    return [i]
        }

    Employee& GetEmployee( int index )
        {if (index=;                             // completely confused here
    }
    int GetEmployeeCount()
        {
            return m_employeeCount;
        };
    private:
    Employee m_lstEmployee[50];
    int m_employeeCount;
};
#endif

员工.h 文件如下...

#ifndef _EMPLOYEE
#define _EMPLOYEE
#include<iostream>
#include<iomanip>
#include <string>
using namespace std;
class Employee
{
    public:
    void Setup( const string& first, const string& last, float pay );
    {
        m_firstName = first;
        m_lastName = last;
        m_payPerHour = pay;
        m_activeEmployee = true;
    }
    string GetName()
    {
        return m_firstName+""+m_lastName
    };
    bool GetIsActive()
    {
        return m_activeEmployee;
    };
    void LayOff()
    {
        m_activeEmployee= false;
    };
    void Output()
        cout<<GetName()<<",PAY:$"<<fixed<<setprecision(2)<<m_payPerHour<<endl;
    private:
    string m_firstName;
    string m_lastName;
    float m_payPerHour;
    bool m_activeEmployee;
};
#endif

在过去的两天里,我一直在写这门课,试图弄清楚我做错了什么。这是我第一次尝试用C++编写类。任何和所有的帮助都非常感谢。我标记了遇到//问题的地方。

你的代码有很多很多问题...

我将首先提供可编译的代码,这些代码或多或少可以满足您的需求。我不确定你如何去提问,但将其与你自己的代码进行比较并阅读一本好的 c++ 书......

我用向量替换了你的数组。我使用构造函数来初始化员工。我(令我自己沮丧的是(添加了 std,主要是因为 Employee 应该生活在自己的标头中,并且在标头中使用命名空间并不好。

在 c++ 中,运算符 [] 是后缀(在索引表达式之后(。

此外,在正常情况下,我会尽可能将接口和实现分开。至少如果不是绝对必要,我不会使用内联函数。

新代码...:

#include <iostream>
#include <iomanip>
#include <vector>
#include <iterator>
#include <string>
class Employee
{
    public:
      //This is a constructor....
      Employee( const std::string& first, const std::string& last, float pay )
      //The members can be initialized in a constructor initializer list as below.
      : m_firstName( first ), m_lastName( last ), m_payPerHour( pay ),
        m_activeEmployee() //Scalars are initialized to zero - bool to false...
      {
      }
      std::string GetName() const
      {
        return m_firstName+" "+m_lastName;
      }
      bool GetIsActive() const
      {
        return m_activeEmployee;
      };
      void LayOff()
      {
        m_activeEmployee = false;
      }
      std::ostream& Output( std::ostream& out ) const
      {
        return out << GetName() <<",PAY:$" 
                   << std::fixed << std::setprecision(2) << m_payPerHour;
      }
    private:
      std::string m_firstName;
      std::string m_lastName;
      float m_payPerHour;
      bool m_activeEmployee;
};
inline std::ostream& operator << ( std::ostream& os, const Employee& employee )
{
  return( employee.Output( os ) );
}

class EmployeeHandler
{
  public:
    void AddEmployee()
    {
      std::string firstName;
      std::string lastName;
      float payRate;
      std::cout<<"NEW EMPLOYEE"<<std::endl;
      std::cout<<"First Name:"<<std::endl;
      std::cin>>firstName;
      std::cout<<"Last Name:"<<std::endl;
      std::cin>>lastName;
      std::cout<<"Pay Rate:"<<std::endl;
      std::cin>>payRate;
      employees_.push_back( Employee( firstName,lastName,payRate ) );
      std::cout<<"**Employee m_employeeCount added"<<std::endl;
    }
    void EditEmployee()
    {
      std::string newFirst;
      std::string newLast;
      float newPay;
      std::cout<<"Which employee would you like to edit"<<std::endl;
      int indexEdit = GetSelection();
      Employee& employee = employees_[indexEdit];
      std::cout << employee << std::endl;
      std::cout<<"Employee new first name:"<<std::endl;
      std::cin>>newFirst;
      std::cout<<"Employee new last name:"<<std::endl;
      std::cin>>newLast;
      std::cout<<"Employee new pay rate:"<<std::endl;
      std::cin>>newPay;
      employee = Employee( newFirst, newLast, newPay );
      std::cout<<"** Employee index updated"<<std::endl;
    }
    void LayoffEmployee()
    {
      int index = GetSelection();
      if( employees_[index].GetIsActive() )
      {
        std::cout << "Laying off employee:n" << employees_[index] << std::endl;
        employees_[index].LayOff();
      }
      else
      {
        std::cerr << "Already layed off employee:" << employees_[index] << std::endl;
      }
    }
    void DisplayEmployeeList()
    {
      std::copy( employees_.begin(), employees_.end(), std::ostream_iterator<Employee>( std::cout, "n" ) );
    }
    int GetSelection()
    {
        std::size_t indexNumber;
        std::cout << "Select an employee from the list below by specifying its number:" << std::endl;
        DisplayEmployeeList();
        do{
          while( !std::cin >> indexNumber )
          {
            std::cin.clear(); 
            std::cin.ignore();
            std::cerr << "Select a number..." << std::endl;
          }
          if( indexNumber >= employees_.size() )
          {
            std::cerr << "Select a number within range of list below:" << std::endl;
            DisplayEmployeeList();
          }
        }
        while( indexNumber >= employees_.size() );
        return indexNumber;
    }
    Employee& operator[]( std::size_t index )
    {
      return employees_[index];
    }
    const Employee& operator[]( std::size_t index ) const
    {
      return employees_[index];
    }
    std::size_t EmployeeCount() const
    {
      return employees_.size();
    }
  private:
    std::vector<Employee> employees_;
};

int main( int argc, char* argv[] )
{
  return 0;
}

最后 - 代码只是编译,而不是测试。我怀疑我可能犯了一个错误,但唉,时间!!