Форум программистов, компьютерный форум CyberForum.ru

Некорректная сортировка объектов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Тот же Тейлор http://www.cyberforum.ru/cpp-beginners/thread708910.html
Вот все, что могу и понимаю..... помогите ее исправить и дописать под формулу #include "stdafx.h" #include <iostream> #include <stdio.h> #include <math.h> using namespace std; int main ()
C++ Переписать код с Java на C++ Добрый вечер. Помогите переписать код с Java на C++. import java.io.*; import java.util.*; http://www.cyberforum.ru/cpp-beginners/thread708904.html
Создать класс CPoint – точка C++
Создать класс CPoint – точка. На его основе создать классы CColoredPoint и CLine. На основе класса CLine создать классы CColoredLine и CPolyLine – многоугольник. Все классы должны иметь методы для установки и получения значений всех координат, а также изменения цвета и получения текущего цвета. Написать демонстрационную программу, в которой будет использоваться список объектов этих классов в...
C++ Как отсортировать двумерный массив по сумме элементов в строке
Дан массив 4 4 5 5 5 5 5 5 5 5 5 4 4 5 4 надо чтоб получилось 5 5 5 5 5 4 4 5 5 5 5 4 4 5 4
C++ доработать структуру http://www.cyberforum.ru/cpp-beginners/thread708896.html
Определите структурный тип содержащий след инф-ю: Марка авто, цвет, кол-во, цена.Ввести 5 элем-в данного типа. Распечатать инф-ю в табл виде, расположив по алфавиту по цвету.Подсчитать сумму по каждой марке авто, сумму по всем авто и определить авто с самым популярным цветом. я написала структуру,посчитала сумму по всем,а как по отдельности посчитать я не знаю,помогите плиз #include...
C++ Есть задание написать класс подобный string. Нуждаюсь в уточнениях The class is a dynamic string consisting of US-ASCII characters, i.e. the usual ASCII characters with codes not exceeding 127. This limitation is introduced to exclude problems related to encodings and localization. Получается под символы в классе выделить обычный динамический массив из char не получится? Надо что-то еще сделать? В char же 255 символов влезает. И можно ли как-то... подробнее

Показать сообщение отдельно
iPhonia
2 / 2 / 0
Регистрация: 11.03.2012
Сообщений: 48
25.11.2012, 19:41     Некорректная сортировка объектов
Задача такая:
Построить три класса (базовый и 2 производный), описывающие некоторых работников с почасовой оплатой (один из потомков) и фиксированной оплатой (второй потомок). Описать в базовом классе абстрактный метод для расчета среднемесячной заработной платы.
Для работников с почасовой оплатой формула для расчета такова: «среднемесячная заработная плата = 20.8 * 8 * почасовую ставку», для работников с фиксированной оплатой «среднемесячная заработная плата = фиксированной месячной оплате».
Со всем вышесказанным проблем не возникло, но одно из заданий не получается, а именно: упорядочить всю последовательность работников по убыванию среднемесячного заработка.
После использования функции sort() объекты не сортируются по убыванию, а просто перемешиваются непонятно по какому принципу.

Объявление класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#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
Определения функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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
.СРР-файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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;   
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru