58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
1

Шаблон функции

05.12.2020, 21:08. Показов 292. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Даны определения и описания следующих классов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Displayable.h"
#ifndef SICT_EMPLOYEE_H_
#define SICT_EMPLOYEE_H_
namespace sict {
    class Employee :public Displayable {
        int _empno;
        char _name[41];
        double _salary;
        void set(int stno, const char* name, double salary);
    public:
        Employee(int stno, const char* name = "no name", double salary = 0.0);
        std::ostream& display(std::ostream& os)const;
        bool operator<=(const Employee& E)const;
        bool operator>=(const Employee& E)const;
        operator const char*()const;
    };
}
#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
#define _CRT_SECURE_NO_WARNINGS
#include <iomanip>
#include <cstring>
#include "Employee.h"
namespace sict {
 
    void Employee::set(int stno, const char* name, double salary) {
        _empno = stno;
        std::strcpy(_name, name);
        _salary = salary;
    }
    Employee::Employee(int stno, const char* name, double salary) {
        set(stno, name, salary);
    }
    std::ostream& Employee::display(std::ostream& os)const {
        return os << _empno << " " << _name << ", " << std::setprecision(2) << std::fixed << _salary;
    }
    bool Employee::operator<=(const Employee& E)const {
        return _empno <= E._empno;
    }
    bool Employee::operator>=(const Employee& E)const {
        return _empno >= E._empno;
    }
    Employee::operator const char*()const {
        return _name;
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
#ifndef SICT_DISPLAYABLE_H_
#define SICT_DISPLAYABLE_H_
namespace sict {
    class Displayable {
    public:
        virtual std::ostream& display(std::ostream& os)const = 0;
    };
 
    std::ostream& operator<<(std::ostream& os, const Displayable& D);
}
 
#endif

C++
1
2
3
4
5
6
#include "Displayable.h"
namespace sict {
    std::ostream& operator<<(std::ostream& os, const Displayable& D) {
        return D.display(os);
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "Displayable.h"
#ifndef SICT_STUDENT_H_
#define SICT_STUDENT_H_
namespace sict {
 
    class Student :public Displayable {
        int _stno;
        char _name[41];
        void set(int stno, const char* name);
    public:
        Student(int stno, const char* name = "no name");
        Student(const Student& S)=delete;
        Student& operator=(const Student& S)=delete;
        std::ostream& display(std::ostream& os)const;
        bool operator<=(const Student& S)const;
        bool operator>=(const Student& S)const;
        operator const char*()const;
    };
}
#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
#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include "Student.h"
namespace sict {
    void Student::set(int stno, const char* name) {
        _stno = stno;
        std::strcpy(_name, name);
    }
    Student::Student(int stno, const char* name) {
        set(stno, name);
    }
    std::ostream& Student::display(std::ostream& os)const {
        return os << _stno << " " << _name;
    }
    bool Student::operator<=(const Student& S)const {
        return _stno <= S._stno;
    }
    bool Student::operator>=(const Student& S)const {
        return _stno >= S._stno;
    }
    Student::operator const char*()const {
        return _name;
    }
 
}
И main для тестирования:

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
#include <iostream>
#include "Employee.h"
#include "Student.h"
#include "validate.h"
 
using namespace std;
using namespace sict;
int main() {
    int i;
    bool v[10];
    Student S[6] = { { 2345, "Lisa Simpson" },{ 12345, "Bart Simpson" },
    { 4567, "Ralph Wiggum" },{ 56789, "Milhouse Van Houten" },
    { 67890, "Todd Flanders" },{ 34567, "Nelson Muntz" } };
 
    Employee E[6] = { Employee(213456, "Carl Carlson", 62344.56), Employee(122345, "Mindy Simmons", 65432.44),
        Employee(435678, "Lenny Leonard", 43213.22), Employee(546789, "Waylon Smithers", 654321.55),
        Employee(657890, "Frank Grimes", 34567.88), Employee(364567, "Homer Simpson", 55432.11) };
 
    int vals[10] = { 2, 6, 4, 67, 4, 6, 7, 5, 4, 6 };
 
    char cvals[10] = { 'A', 'e', 'B', 'd', 'e', 'G', 'H', 'l', 'p', 'x' };
    if (!validate(Student(11111), S, 6, v)) {
        cout << "These students have invalid student ids:" << endl;
        for (i = 0; i < 5; i++) {
            if (!v[i]) cout << S[i] << endl;
        }
    } 
    else {
        cout << "All students have valid students ids" << endl;
    } 
    if (!validate(Employee(111111), E, 6, v)) {
        cout << "These employee have invalid employee ids:" << endl;
        for (i = 0; i < 5; i++) {
            if (!v[i]) cout << E[i] << endl;
        }
    }
    else {
        cout << "All employee have valid employee ids" << endl;
    }
    if (!validate(3, vals, 10, v)) {
        cout << "These integer values are invalid: " << endl;
        for (i = 0; i < 10; i++) {
            if (!v[i]) cout << vals[i] << endl;
        }
    }
    else {
        cout << "All integer values are valid" << endl;
    }
 
    if (!validate('B', cvals, 10, v)) {
        cout << "These character values are invalid: " << endl;
        for (i = 0; i < 10; i++) {
            if (!v[i]) cout << cvals[i] << endl;
        }
    }
    else {
        cout << "All character values are valid" << endl;
    }
    system("pause");
    return 0;
}
Необходимо было создать функцию validate в файле validate.h, в нем описать некоторую логику
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<typename T>
bool validate(T m, T val[], int k, bool res[]) {
    bool f = true;
    for (int i = 0; i < k; i++) {
        if (val[i] >= m)
            res[i] = true;
        else {
            res[i] = false;
            f = false;
        }
    }
    return f;
}
Но для Student данный шаблон не будет работать, т.к. Student(const Student& S)=delete;
Если писать: bool validate(T& m, T val[], int k, bool res[]), то для значений rvalue это тоже не сработает.
Если перегружать шаблон, то будет неопределенность. Пробовал явную специализацию писать, тоже не получилось. Менять только можно файл validate.h. Что я где туплю?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2020, 21:08
Ответы с готовыми решениями:

Какой шаблон тут используется? Шаблон класса или шаблон функции
Какой шаблон тут используется? Шаблон класса или шаблон функции,и с объяснениями пожалуйста ...

Используя перегруженные функции и шаблон функции удалить из массива элемент по индексу
Стоит следующая задача: Используя перегруженные функции и шаблон функции удалить из массива...

шаблон функции. Задачей функции является округление вышеуказанного вещественного числа с заданной точностью
Написать функцию, которая принимает в качестве параметров вещественное число и количество знаков...

Ошибка в шаблоне функции: "Отсутствуют экземпляры шаблон функции, соответствующие списку аргументов"
#include &lt;iostream&gt; #include &lt;iterator&gt; #include &lt;map&gt; #include &lt;Windows.h&gt; #include...

2
18813 / 9818 / 2400
Регистрация: 30.01.2014
Сообщений: 17,244
05.12.2020, 21:11 2
Цитата Сообщение от Senarist Посмотреть сообщение
bool validate(T m, T val[], int k, bool res[])
C++
1
2
template<typename T>
bool validate(const T& m, T val[], int k, bool res[]) {
1
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
05.12.2020, 21:15  [ТС] 3
DrOffset, блин, совсем позабыл про это, спасибо!
0
05.12.2020, 21:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2020, 21:15
Помогаю со студенческими работами здесь

Перегруженные функции и шаблон функции
Указания: 1. Перегрузить функции для массивов типа char, int, и double. 2. Инстанцировать шаблон...

Шаблон функции
компилятор пишет, что неудается составить аргумент шаблон для &quot;L&quot;, как это можно исправить?? ...

Шаблон функции
Объясните в чем ошибка) Задание: 2. Примером удачного применения функции шаблона есть функция...

Шаблон функции
Создать шаблон функции, выполняющей Комбинированный метод быстрой сортировки с методом «пузырька»...

шаблон функции
Здрасти. Как правильно написать шаблон ,например, этой функции? int **newmatrix(int row, int...

Шаблон функции
Всем привет. Помогите пожалуйста решить вот такую задачку. Написать шаблон функции для поиска...


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

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

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