C ++:类问题

时间:2013-09-27 16:55:38

标签: c++ function class pointers void

我正试图让我的班级做以下事情......

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

  2. AddEmployee:由菜单选项1调用。显示“NEW EMPLOYEE”。提示用户 员工的名字,姓氏和工资率,一次一个。使用Employee.Setup添加 雇员到m_lstEmployee。显示“已添加员工m_employeeCount”。增量 m_employeeCount。

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

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

  5. LayoffEmployee:由菜单选项3调用。使用EmployeeSelection获取索引 员工要裁员。使用Employee.Output显示所选员工的名字,最后一个 名称和工资率。使用Employee.LayOff关闭员工。显示“员工 指数下岗“,其中指数被裁掉员工指数。

  6. DisplayEmployeeList:由菜单选项4调用。显示“EMPLOYEES”。然后使用 Employee.Output显示每个员工记录这样的事情,“[1] David Johnson, 支付:5.00美元(现在的员工)“和这样的前员工记录,”[2] PAY:$ 5.00(前雇员)“,括号中的数字是 员工在m_lstEmployee中的索引。

  7. GetEmployee:返回m_lstEmployee中所选员工记录的地址。

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

  9. 到目前为止,我有......

    #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
    

    employee.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 ++编写类。任何和所有的帮助都非常感谢。我标记了//我遇到问题的地方。

1 个答案:

答案 0 :(得分:2)

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

首先,我将提供可编辑的代码,或多或少地执行您想要的代码。我不确定如何提问,但将它与你自己的代码进行比较并阅读一本好的c ++书......

我用矢量替换了你的数组。我使用了构造函数来初始化Employee。我(对我自己的沮丧)添加了std,主要是因为Employee应该存在于自己的头文件中,并且在头文件中使用命名空间并不好。

在c ++中,operator []是后缀(在索引表达式之后)。

另外,在正常情况下,我会尝试在可能的情况下保持接口和实现分离。至少我不会使用内联函数,如果不是绝对必要的话。

新代码......:

#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;
}

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