Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2012, 19:51   #1
Frants
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 19
По умолчанию Некорректная работа функции sort()

Задача такая:
Построить три класса (базовый и 2 производный), описывающие некоторых работников с почасовой оплатой (один из потомков) и фиксированной оплатой (второй потомок). Описать в базовом классе абстрактный метод для расчета среднемесячной заработной платы.
Для работников с почасовой оплатой формула для расчета такова: «среднемесячная заработная плата = 20.8 * 8 * почасовую ставку», для работников с фиксированной оплатой «среднемесячная заработная плата = фиксированной месячной оплате».
Со всем вышесказанным проблем не возникло, но одно из заданий не получается, а именно: упорядочить всю последовательность работников по убыванию среднемесячного заработка.
После использования функции sort() объекты не сортируются по убыванию, а просто перемешиваются непонятно по какому принципу.
Красным выделил прототип и определение перегруженной операции <, а так же момент использования функции sort() в программе.

Объявление класса:
Код:
#ifndef CLASS_H_
#define CLASS_H_
#include <string>

using namespace std;
//Base class
class Employee
{
    private:
              string name;
              int id;
    protected:
              double total_salary;
    public:
              Employee(const string & n = "Unknown", int i = 0);
              virtual void calc_salary() = 0;
              void show();
              friend bool operator<(const Employee & r1, const Employee & r2);
              //friend bool worseThan(const Employee & r1, const Employee & r2);
              virtual ~Employee(){}
};

//Monthly salary
class Employee_monthly : public Employee
{
      private:
              double m_salary;
      public:
              Employee_monthly(const string & n = "Unknown", int i = 0, double m_sal = 0.0);
              virtual void calc_salary();
              
};

//Hourly salary
class Employee_hourly : public Employee
{
      private:
              double h_salary;
      public:
              Employee_hourly(const string & n = "Unknown", int i = 0, double h_sal = 0.0);
              virtual void calc_salary();
};

#endif
Определения функций:
Код:
#ifndef DEF_H_
#define DEF_H_
#include <iostream>
#include <string>

using namespace std;

Employee::Employee(const string & n, int i) : name(n), id(i){}

Employee_monthly::Employee_monthly(const string & n, int i, double m_sal) : Employee(n,i)
{
    m_salary = m_sal;
}

Employee_hourly::Employee_hourly(const string & n, int i, double h_sal) : Employee(n,i)
{
    h_salary = h_sal;
}

void Employee::calc_salary()
{
     
}

void Employee_monthly::calc_salary()
{
     total_salary = m_salary;
}

void Employee_hourly::calc_salary()
{
     total_salary = 20.8 * 8 * h_salary;
}

void Employee::show()
{
     cout << "Name:\t" << name << endl;
     cout << "ID:\t" << id << endl;
     cout << "Salary:\t" << total_salary << endl << endl;
}

bool operator<(const Employee & r1, const Employee & r2)
{
    if (r1.total_salary > r2.total_salary)
        return true;
    else if (r1.total_salary == r2.total_salary && r1.name < r2.name)
        return true;
    else
        return false;
}

#endif
.СРР-файл:
Код:
#include <iostream>
#include <string>
#include <vector>
#include "final_class.h"
#include "definitions.h"

using namespace std;

int main()
{
    Employee_monthly Joe("Joe", 5675, 2000);
    Joe.calc_salary();
    
    Employee_hourly Bob("Bob", 8854, 12);
    Bob.calc_salary();
    
    Employee_hourly Mike("Mike", 6765, 13);
    Mike.calc_salary();
    
    Employee_monthly August("August", 6556, 3000);
    August.calc_salary();
    
    vector<Employee*>employees(4);
    employees[0] = &Bob;
    employees[1] = &Joe;
    employees[2] = &Mike;
    employees[3] = &August;
    
    employees[0]->show();
    employees[1]->show();
    employees[2]->show();
    employees[3]->show();
    
    sort(employees.begin(),employees.end());
    
    cout << "Sorted:\n";
    employees[0]->show();
    employees[1]->show();
    employees[2]->show();
    employees[3]->show();
    system("PAUSE");
    return 0;   
}
Frants вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректная работа Ucoz.ru docbrain WordPress и другие CMS 7 31.03.2010 11:26
Некорректная работа функции в потоке. TwiX Общие вопросы Delphi 3 28.02.2010 12:33
Вопрос насчет функции sort TOLIK111 Общие вопросы C/C++ 1 06.12.2009 15:57
C++: Портотип функции sort Crazy_caramel Помощь студентам 4 26.11.2009 23:17
Некорректная работа потока 3D Hunter Общие вопросы Delphi 7 09.03.2009 10:51