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

Использование абстрактного класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Умножение в двоичной системе http://www.cyberforum.ru/cpp-beginners/thread1194920.html
Добрый вечер. Помогите с реализацией умножения в двоичной системе. Дано два массива, например 1111 и 1111. Как написать цикл умножения друг на друга? Добавлено через 56 минут Я так понимаю нужно как-то создавать массивы, равные кол-ву элементов массива, и складывать их, но как реализовать на практике - хоть убейте не понимаю Добавлено через 27 минут Ну помогите пожалуйста, мне нужен...
C++ Создать класс TIME для работы со временем создать класс ВРЕМЯ,разработав следующие элементы класса: •Поля с;(временной интервал,заданный в секундах) •Конструктор,позволяющий создать экземпляр класса. •Методы позволяющие: вывести временной интервал в секундах пересчитать временной интервал в секундах в величину,выраженную в часах,минутах и секундах. http://www.cyberforum.ru/cpp-beginners/thread1194910.html
Графики функций C++
Все придельно пирепутано. Ошибки многочислены. Я в общем с большим трудом секу саму тему. Мало того я вовсе перестал понимать что я уже правлю. Вот проект. Надо (хочу) написать прогу, которая будет выводить графики функций. Вот ссылка на скачивание, файл только один. Вот http://gfile.ru/a5QMV Тексты надо вставлять непосредственно в сообщение Пожалуста, разархивируйте! Там проект и там...
C++ Посчитать рекурсивным методом значение математической зависимости
Посчитать рекурсивным методом значение математической зависимости. Функция Аккермана для неотрицательных чисел m и n. http://cs618226.vk.me/v618226581/b605/-PGAnV8NUXQ.jpg
C++ Удалить первое слово в строке http://www.cyberforum.ru/cpp-beginners/thread1194893.html
Дан массив строк текста, массив разделителей нужно удалить первое слово и разделитель после в каждой строке него. вывести преобразованый массив Прошу помощи, немогу разобраться с удалением слова
C++ поиск элемента Помогите в программе реализовать поиск элемента #include <iostream> #include <algorithm> using namespace std; template <class T> void sort(T arr, int size) { for (int i = 0; i < size; i++) { подробнее

Показать сообщение отдельно
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
31.05.2014, 20:42     Использование абстрактного класса
Доброго времени. Использую абстрактный класс Algorithm с абстрактным методом Calculate() и 5 производных от него классов, реализующих тот или иной алгоритм и возникла непонятная проблема.
Компилятор пишет, что
C++
1
2
3
4
error: prototype for 'void AverageCriterionAlgorithm::Calculate(const QList<QString>&, QList<QString>, Result&)' does not match any in class 'AverageCriterionAlgorithm'
 
error: candidate is: virtual void AverageCriterionAlgorithm::Calculate(const QList<QString>&, const QList<QString>&, Result&)
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
то есть он не видит объявление функции в классе.

.h
C++ (Qt)
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
#ifndef CRITERIA_H
#define CRITERIA_H
 
#include <QVector>
#include <QMap>
#include <QString>
 
 
#include "DataStructures.h"
 
class Solution;
 
class Algorithm {
public:
//    Algorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result) = 0;
};
 
class AverageCriterionAlgorithm : public Algorithm
{
public:
   AverageCriterionAlgorithm();
 
   virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class WaldAlgorithm : public Algorithm
{
public:
    WaldAlgorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class HurwitzAlgorithm : public Algorithm
{
public:
    HurwitzAlgorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class WeightedCriterionAlgorithm : public Algorithm
{
public:
    WeightedCriterionAlgorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class SelectionByMainCriterion : public Algorithm
{
public:
    SelectionByMainCriterion();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
//class SelectionByImportance : public Algorithm
//{
//public:
//    SelectionByImportance();
 
//    virtual float Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result) override;
//};
 
//class SelectionByBenefit : public Algorithm
//{
//public:
//    SelectionByBenefit();
 
//    virtual float Calculate(Solution* solution, const QList<QString>& criteria) override;
//};
 
#endif // CRITERIA_H


.cpp
C++ (Qt)
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "Algorithms.h"
#include "Solution.h"
 
#include <QtAlgorithms>
#include <algorithm>
#include "SolutionManager.h"
#include "AlgorithmManager.h"
 
 
void AverageCriterionAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    int criteriaCount = criteria.size();
 
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        float sum = 0.f;
 
        for(auto& criterion: criteria) {
            sum += solution->GetCriterionValue(criterion);
        }
 
        sum /= criteriaCount;
 
        result.Results.insert(solutionName, sum);
    }
 
    auto values = result.Results.values();
 
    auto greatest = std::max_element(values.begin(), values.end());
 
    // first element will be a greatest
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void WaldAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        QList<float> values;
 
        for(auto& criterion: criteria) {
            values.push_back(solution->GetCriterionValue(criterion));
        }
 
        auto iter = std::min_element(values.begin(), values.end());
 
        result.Results.insert(solutionName, *iter);
    }
 
    auto values = result.Results.values();
 
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void HurwitzAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    float param = AlgorithmManager::GetInstance()->GetHurwitzParameter();
 
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        QList<float> values;
 
        for(auto& criterion: criteria) {
            values.push_back(solution->GetCriterionValue(criterion));
        }
 
        auto smallest = std::min_element(values.begin(), values.end());
        auto greatest = std::max_element(values.begin(), values.end());
 
        float calculation = param * (*smallest) + (1 - param) * (*greatest);
 
        result.Results.insert(solutionName, calculation);
    }
 
    auto values = result.Results.values();
 
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void WeightedCriterionAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        float sum = 0.f;
 
        for(auto& criterion: criteria) {
            float value = solution->GetCriterionValue(criterion);
            float coef  = solution->GetCriterionWeightCoef(criterion);
 
            sum += value * coef;
        }
 
        result.Results.insert(solutionName, sum);
    }
 
    auto values = result.Results.values();
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void SelectionByMainCriterion::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    QString mainCriterion = SolutionManager::GetInstance()->GetMainCriterionName();
 
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        float value = solution->GetCriterionValue(mainCriterion);
        float threshold = solution->GetCriterionThreshold(mainCriterion);
 
        if(value >= threshold) {
            result.Results.insert(solutionName, value);
        }
    }
 
    auto values = result.Results.values();
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
//float SelectionByImportance::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
 
//}
 
//float SelectionByBenefit::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
 
//}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru