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

Сравнение производных классов - 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. Где можно найти гайд или лучше видео гайд, как с консолек перейти на формы ? 2. На каком языке проще перейти на формы. Джаве или С++ ? 3. В целом сложно ли без всяких преподавателей самому перейти ?
C++ Вывести квадраты натуральных чисел, которые меньше указаного числа http://www.cyberforum.ru/cpp-beginners/thread1219443.html
вывести квадраты натуральных чисел, которые меньше за указаное число
C++ Классы и наследование c++ Написать программу которая описывает иерархию классов: ошибка в программе ("недостаточно привилегий", "ошибка преобразования", "невозможно преобразовать значение", "невозможно привести к интерфейсу"). Наследники должны иметь поля, содержащие дополнительные сведения об ошибке, если такие имеются.Продемонстрировать работу всех методов классов,предоставив пользователю выбор типа объекта для... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
29.06.2014, 23:59     Сравнение производных классов
Цитата Сообщение от Kukurudza Посмотреть сообщение
Хорошо, а если я хочу в будущем менять порядок следования объектов в контейнере?
Есть такой способ! И в классы ничего добавлять не надо:
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
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
/////////////////////////////////////////////////////////////////////////////////////////
//Пусть у меня есть базовый класс S. У него есть два наследника A и B. Как мне скидывать, 
//например в set, указатели (шаредпэтэры например) на объекты классов A и B так, чтобы 
//сначала шли объеты класса A, затем объекты класса B?
//Понятно как сравнивать объекты класса только A или только B между собой, а как сравнивать 
//объекты классов A и B между собой? Потенциально может быть и так что у A и B тоже будут 
//наследники, например Aa, Ab, Ba и Bb. И тогда надо будет сравнивать все объекты между собой 
//(S, A, B, Aa, Ab, Ba, Bb). Как такое делается?
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
void    print_name( T_str   const   &   s )
{
    std::cout   <<  s
                <<  '\t';
}
/////////////////////////////////////////////////////////////////////////////////////////
struct   T_base
{
    virtual     void    print()
    {
        print_name("T_base");
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector<T_base*>    T_base_pointers;
/////////////////////////////////////////////////////////////////////////////////////////
struct   T_a     :   T_base
{
    virtual     void    print()
    {
        print_name("T_a");
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
struct   T_b     :   T_base
{
    virtual     void    print()
    {
        print_name("T_b");
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
struct   T_c     :   T_base
{
    virtual     void    print()
    {
        print_name("T_c");
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
template< typename  TT >
bool    is( T_base  *   base_p )
{
    return  typeid(*base_p).name()  ==  typeid(TT).name();
}
/////////////////////////////////////////////////////////////////////////////////////////
void    print( T_base_pointers  const   &   base_pointers )
{
    std::for_each
        (
            base_pointers.begin (),
            base_pointers.end   (),
            std::mem_fun        (&T_base::print)
        );
 
    std::cout   <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int  main()
{
    T_base_pointers     base_pointers;
    base_pointers.push_back( new    T_a );
    base_pointers.push_back( new    T_b );
    base_pointers.push_back( new    T_c );
 
    print( base_pointers );
 
    auto    new_begin   =   std::partition
                                (
                                    base_pointers.begin (),
                                    base_pointers.end   (),
                                    is<T_c>
                                );
 
    print( base_pointers );
 
    std::partition
        (
            new_begin,
            base_pointers.end(),
            is<T_a>
        );
 
    print( base_pointers );
 
    new_begin   =   std::partition
                        (
                            base_pointers.begin (),
                            base_pointers.end   (),
                            is<T_b>
                        );
 
    print( base_pointers );
 
    std::partition
        (
            new_begin,
            base_pointers.end(),
            is<T_c>
        );
 
    print( base_pointers );
 
    new_begin   =   std::partition
                        (
                            base_pointers.begin (),
                            base_pointers.end   (),
                            is<T_a>
                        );
 
    print( base_pointers );
 
    system( "pause" );
}
 
Текущее время: 01:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru