c++ - 不能在 C++ 中交换数组中的对象

标签 c++ swap

我是 C++ 的新手并且陷入了交换问题 下面的代码是一个程序,按字母顺序对员工姓名进行排序,并打印出原始姓名和排序后的姓名,但是 交换方法不起作用 printEmployees 的两个输出完全相同,有人可以帮我吗?谢谢

    #include <iostream>

    #include <string>

    #include <iomanip>

    #include <algorithm>
using namespace std;


class employee
{

   /* Employee class to contain employee data
   */

   private:
     string surname;
     double hourlyRate;
     int empNumber; 
   public:
      employee() {
         hourlyRate = -1;
         empNumber = -1;
         surname = "";
      }
      employee(const employee &other) :
         surname(other.surname),
         hourlyRate(other.hourlyRate),
         empNumber(other.empNumber){}

      void setEmployee(const string &name, double rate,int num);
      string getSurname() const;
      void printEmployee() const;
     employee& operator = (const employee &other)
    {employee temp(other);
     return *this;}};    

     void employee::setEmployee(const string &name, double rate, int num) {   
      surname = name;
      hourlyRate = rate;
      empNumber = num;
      }
     string employee::getSurname() const { return surname; }  
     void employee::printEmployee() const {
         cout << fixed;
         cout << setw(20) << surname << setw(4) << empNumber << "  " << hourlyRate << "\n";
      }

  void printEmployees(employee employees[], int number)
   {
   int i;
    for (i=0; i<number; i++) { employees[i].printEmployee();   }
   cout << "\n";
   }


void swap(employee employees[], int a, int b)
{
  employee temp(employees[a]);
employees[a] = employees[b];
employees[b] = temp;

}


void sortEmployees(employee employees[], int number)
{
   /* use selection sort to order employees, 
      in employee 

name order
   */


    int inner, outer, max;


    for (outer=number-1; outer>0; outer--)
   {
      // run though array number of times
      max = 0;
      for (inner=1; 

inner<=outer; inner++)
      {
         // find alphabeticaly largest surname in section of array
         if (employees

[inner].getSurname() < employees[max].getSurname())
            max = inner;
      }
      if (max != outer)
      {
         // 

swap largest with last element looked at in array
         swap(employees, max, outer);
      }
   }
}


int main()
{
   employee employees[5];

   employees[0].setEmployee("Stone", 35.75, 053);
   employees[1].setEmployee

("Rubble", 12, 163);
   employees[2].setEmployee("Flintstone", 15.75, 97);
   employees[3].setEmployee("Pebble", 10.25, 104);


  employees[4].setEmployee("Rockwall", 22.75, 15);


   printEmployees(employees, 5);

   sortEmployees(employees,5);
   printEmployees(employees, 5);

   return 0;
}

最佳答案

此代码已损坏:

 employee& operator = (const employee &other)
{employee temp(other);
 return *this;}

应该是这样的:

employee& operator= (const employee &other)
{
   surname = other.surname;
   hourlyRate = other.hourlyRate;
   empNumber = other.empNumber;
   return *this;
}

关于c++ - 不能在 C++ 中交换数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866187/

相关文章:

c++ - 为什么在模板评估的第一阶段确定名称的类型,即使是从属名称?

c++ - 为什么基于指针交换两个值在函数范围之外不起作用?

c - 我如何使字符串数组与交换函数交换它的组件?

c++ - LNK2019 : Calling C function from CPP code

c++ - MPI 运行时给出不正确的输出

c++ - 专门化模板成员函数?

鼠标悬停和鼠标按下时的 jQuery 图像交换

dictionary - Clojure 交换!不在 let 绑定(bind)中的映射函数内部工作

Python 值交换什么都不做

c++ - 查看以月为单位的活年