С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Сравнение производных классов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как определить разделить при чтении из файла http://www.cyberforum.ru/cpp-beginners/thread1219495.html
Дан текстовый файл, в котором информация перечислена через запятую: a,b,c,d,e,f без пробелов. Нужно заполнить вектор каждым отдельным словом. Как сделать так, что бы каждое слово читалось по...
C++ Сортировка без перестановки элементов мое задание:Реализуйте двунаправленный список. Необходимо предусмотреть режим сортировки элементов списка без перестановки самих элементов. _________________________________ Что значит сортировка... http://www.cyberforum.ru/cpp-beginners/thread1219494.html
Слетает прога при присваивании разименованованному указателю C++
Помогите плз! Не могу присвоить значение элементу строки; #include <iostream> using namespace std; main() { char* s1 = (char*) "12345"; *s1 = '2'; cout << s1;
Переход к работе с формами - что для этого нужно? C++
Добрый день. Изучаю программирование на языках С++ и Джаве. Уже 2 года. Но только в консольке. Сейчас захотелось научиться работать с Формами. Подскажите : 1. Где можно найти гайд или лучше...
C++ Вывести квадраты натуральных чисел, которые меньше указаного числа http://www.cyberforum.ru/cpp-beginners/thread1219443.html
вывести квадраты натуральных чисел, которые меньше за указаное число
C++ Классы и наследование c++ Написать программу которая описывает иерархию классов: ошибка в программе ("недостаточно привилегий", "ошибка преобразования", "невозможно преобразовать значение", "невозможно привести к... подробнее

Показать сообщение отдельно
0x10
2486 / 1661 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
29.06.2014, 20:24
Voivoid, у меня когда-то примерно так и было реализовано) А потом совесть замучила за то, что везде дублируется функция, отличающаяся не поведением, а только данными.
В итоге получилось что-то такое:
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
#include <algorithm>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
 
class BasePriority {
public:
    virtual int GetPriority() const = 0;
    virtual std::string Name() const = 0;
};
 
template <int p>
class Priority : public BasePriority {
public:
    int GetPriority() const override { return priority_; }
private:
    static const int priority_ = p;
};
 
class A : public Priority<2> {
public:
    std::string Name() const override {
        return "class A";
    }
};
 
class B : public Priority<1> {
public:
    std::string Name() const override {
        return "class B";
    }
};
 
typedef std::shared_ptr<BasePriority> BasePriorityPtr;
typedef std::vector<BasePriorityPtr> BasePtrContainer;
 
int main() {
    struct PriorityComparator {
        bool operator()(const BasePriorityPtr& lhs,
                const BasePriorityPtr& rhs) const {
            return lhs->GetPriority() < rhs->GetPriority();
        }
    };
        
    BasePtrContainer container {
        std::make_shared<B>(),
        std::make_shared<A>(),
        std::make_shared<B>(),
        std::make_shared<B>()
    };
    
    std::sort(container.begin(), container.end(), PriorityComparator());
    
    for (const auto& item : container) {
        std::cout << item->Name() << std::endl;
    }
    
    return 0;
}
Иерархия жирнее, но дублирования уже нет.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.