0 / 0 / 0
Регистрация: 19.04.2018
Сообщений: 3
1

Правильно ли сделано задание по ООП С++, если нет - подправьте

02.05.2018, 19:18. Показов 1431. Ответов 2

Базовый класс: Работник с различными формами начисления заработной платы.
Производные классы: работники с конкретными формами начисления заработной платы.
Виртуальная функция: расчет заработной платы работника за некоторый период.
Ключевая функциональность класса-контейнера: расчет фонда заработной платы для всех работников за некоторый период.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
 
class Container
{
public:
    double sum_salary = 0;
    Container *next;
    int count = 0;
    Container() {};
    ~Container() {};
    double GetSalary()
    {
        return sum_salary;
    }
    int GetCount()
    {
        return count;
    }
};
class Employee
{
public:
    Employee() {};
    ~Employee() {};
    virtual double Salary() = 0;
};
 
class Employee_hour : public Employee
{
private:
    int hours;
    double payment;
 
public:
    Employee_hour()
    {
        hours = 8;
        payment = 10;
    };
    Employee_hour(int hours, double payment, Container *n)
    {
        this->hours = hours;
        this->payment = payment;
        n->sum_salary += Salary();
        n->count++;
        n = n->next;
    }
    double Salary() override
    {
        return (hours * payment);
    }
};
 
class Employee_day : public Employee
{
private:
    int days;
    double payment;
 
public:
    Employee_day()
    {
        days = 2;
        payment = 100;
    };
    Employee_day(int days, double payment, Container *h)
    {
        this->days = days;
        this->payment = payment;
        h->sum_salary += Salary();
        h->count++;
        h = h->next;
    }
    double Salary() override
    {
        return (days * payment);
    }
};
 
int main()
{
    Container *h = new Container;
    Employee_day emp1(18, 125, h);
    Employee_hour emp2(78, 12, h);
    Employee_day emp3(7, 111, h);
    Employee *e1 = &emp1;
    Employee *e2 = &emp2;
    std::cout << e1->Salary() << "\n";
    std::cout << e2->Salary() << "\n";
    std::cout << h->GetSalary() << "\n";
    std::cout << h->GetCount() << "\n";
    getchar();
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2018, 19:18
Ответы с готовыми решениями:

Правильно ли сделано задание
Задание состоит в том что бы Определить является ли число k степенью 3. Не могли бы вы помочь...

Правильно ли сделано задание
Нужно удалить максимальный элемент в массиве. Не могли бы вы помочь объяснить в чем ошибка?...

Дано 20 элементов массива,к каждому прибавить 5. Скажите правильно? Если нет то подправьте пожалуйста
len equ 20 mas dw 1,2,3..... .code .start mov ax,@data mov ds ,ax mov cx,len cycl: add...

Проверьте, пожалуйста, правильно ли сделано задание
Добрый день! Проверьте, пожалуйста, правильно ли сделано задание. Текст задания - Выдать...

2
Эксперт С++
3064 / 1404 / 423
Регистрация: 19.01.2009
Сообщений: 3,816
03.05.2018, 00:49 2
Цитата Сообщение от sanyasosedskiy Посмотреть сообщение
C++
1
2
3
4
public:
     double sum_salary = 0;
     Container *next;
     int count = 0;
sanyasosedskiy, так не должно быть. Эти члены класса должны быть приватными. Создайте функции реализующий основной функционал контейнера, например, void Container::Append(Employee *), void Container::Remove(Employee*) - добавляющие и удаляющие элемент из контейнера. Кроме того, реализация функции double Container::GetSalary() должна быть другой - мы пробегаемся по контейнеру, вызывая у элементов контейнера функцию Salary(), суммируя их значения.
0
134 / 104 / 60
Регистрация: 26.10.2013
Сообщений: 312
03.05.2018, 12:27 3
1. Класс Container. *next не инициализируется.
2. Класс Employee. Деструктор должен быть виртуальным.

schdub правильно сказал, что класс Container должен работать иначе. Вот примерно как это может быть.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <vector>
#include <algorithm>
 
class EmployeeSalary
{
public:
    EmployeeSalary(double payment = .0)
        : payment_(payment)
    { }
    virtual ~EmployeeSalary() = default;
 
    double payment() const
    { return payment_; }
 
    virtual double salary() const = 0;
 
private:
    double payment_;
};
 
class EmployeeSalaryHour : public EmployeeSalary
{
public:
    EmployeeSalaryHour()
        : EmployeeSalary(10)
        , hours_(2)
    { }
 
    EmployeeSalaryHour(int hours, double payment)
        : EmployeeSalary(payment)
        , hours_(hours)
    { }
 
    virtual double salary() const override
    { return hours_ * payment(); }
 
private:
    int hours_;
};
 
class EmployeeSalaryDay : public EmployeeSalary
{
public:
    EmployeeSalaryDay()
        : EmployeeSalary(100)
        , days_(2)
    { }
 
    EmployeeSalaryDay(int days, double payment)
        : EmployeeSalary(payment)
        , days_(days)
    { }
 
    virtual double salary() const override
    { return days_ * payment(); }
 
private:
    int days_;
};
 
class Container
{
public:
    Container() = default;
    ~Container() = default;
 
    void append(const EmployeeSalary *emp)
    { employees_.push_back(emp); }
 
    void remove(const EmployeeSalary *emp)
    { employees_.erase(std::find(employees_.begin(), employees_.end(), emp)); }
 
    double get_salary() const
    {
        double res = .0;
        for (size_t i = 0; i < employees_.size(); ++i) // or std::accumulate
            res += employees_[i]->salary();
        return res;
    }
 
    double get_count() const
    { return employees_.size(); }
 
private:
    std::vector<const EmployeeSalary *> employees_;
};
 
int main()
{
    Container h;
    EmployeeSalary *emp1 = new EmployeeSalaryDay(18, 125);
    EmployeeSalary *emp2 = new EmployeeSalaryHour(78, 12);
    EmployeeSalary *emp3 = new EmployeeSalaryDay(7, 111);
    h.append(emp1);
    h.append(emp2);
    h.append(emp3);
    std::cout << emp1->salary() << "\n";
    std::cout << emp2->salary() << "\n";
    std::cout << h.get_salary() << "\n";
    std::cout << h.get_count() << "\n";
    // не забываем про delete
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2018, 12:27
Помогаю со студенческими работами здесь

Правильно ли выполнено задание? ООП
* //*Задание: Написать программу, в которой описан класс «Водное средство передвижения». ...

Проверьте верно ли сделано задание (задание для ослабленных детей)
Схема дана на фото, нужно найти скорости точек А и В изображенных на схеме, проверьте мое решение...

если запускать приложение в вижуалке (ctrl + f5) то оно работает правильно, но если запустить через .exe файл - нет!
если запускать приложение в вижуалке (ctrl + f5) то оно работает правильно, но если запустить через...

Верно ли сделано задание?
с помощью рекурсии вывести на экран одномерный массив #include &lt;stdio.h&gt; #include &lt;time.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru