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

Действия со всеми объектами класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамическое программирование http://www.cyberforum.ru/cpp-beginners/thread650308.html
Мячик прыгает по лестнице, состоящей из N ступенек, строго сверху вниз. За один прыжок он может отпрыгнуть на не более M ступенек. Необходимо посчитать, сколькими способами он может спуститься без вывода самих вариантов прыжков. Даны два числа - количество ступенек в лестнице и максимальное количество ступенек, на которое может отпрыгнуть мячик. Все получаемые значения положительные и не...
C++ Начать отладку в С++ Здравствуйте! Помогите мне пожалуйста...я написала код, все без ошибок и не могу открыть его! Нажимаю "начать отладку", черное окно появляется и быстро-быстро исчезает....а внизу пишут: "hello_1.exe": Загружено: "E:\WINDOWS\system32\ntdll.dll", Невозможно найти или открыть файл PDB "hello_1.exe": Загружено: "E:\WINDOWS\system32\kernel32.dll", Невозможно найти или открыть файл PDB Все... http://www.cyberforum.ru/cpp-beginners/thread650287.html
C++ указатели на элементы класса
Здравствуйте! есть код: class A { public: void C(void){return;} static int D(void){return 0;} int a;
Все положительные элементы двумерного массива записать в один одномерный массив, а остальные в другой C++
Дан двумерный массив размером n на n заполнены целыми числами. все его положительные элементы записать в один одномерный массив а остальные в другой
C++ Склеить два wav-файла http://www.cyberforum.ru/cpp-beginners/thread650271.html
/* Написать программу, формирующую из двух WAV файлов третий путем конкатенации файлов. */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <Windows.h> typedef struct {
C++ опредилить общую стоимость известны данные о мощности двигателей (в л.с.) и стоимость 30 легковых машин . определить общую стоимость автомобилей у которы больше 100 л.с подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.09.2012, 23:29     Действия со всеми объектами класса
Oktaram, давайте-ка поконкретнее. Есть два класса? Ну и где они есть? Только в вашем воображении или хоть каким-то образом оформлены в код? Надеюсь, что второй вариант, потому что пока по вашему заданию трудно понять, чего именно вы хотите.
Пока, если я всё верно понял, можно делать так: первый класс каким-то образом достаёт условие из второго (пока как раз и не понятно, как вы это хотите делать; я бы во втором классе создал функтор-предикат и метод для его возвращения), и на основе этого условия формирует вектор или список элементов, которые и возвращает.

Добавлено через 2 часа 32 минуты
Вот вам пример.
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
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
 
class ContainedObject
{
public:
    explicit ContainedObject(int data = 0):
    m_data(data)
    {
    }
    
    int get_data() const
    {
        return m_data;
    }
    
private:
    int m_data;
};
 
class Predicate
{
public:
    Predicate(int lower_bound, int upper_bound):
    m_lower_bound(lower_bound),
    m_upper_bound(upper_bound)
    {
    }
    
    bool operator()(int value) const
    {
        return m_lower_bound < value && value < m_upper_bound;
    }
    
private:
    int m_lower_bound;
    int m_upper_bound;
};
 
class PredicateGenerator
{
public:
    PredicateGenerator(int lower_bound, int upper_bound):
    m_lower_bound(lower_bound),
    m_upper_bound(upper_bound)
    {
    }
    
    Predicate get_predicate() const
    {
        return Predicate(m_lower_bound, m_upper_bound);
    }
    
private:
    int m_lower_bound;
    int m_upper_bound;
};
 
class ContainerGenerator
{
public:
    ContainerGenerator(int lower_bound, int upper_bound, int count,
                       const PredicateGenerator& gen):
    m_objects(count),
    m_gen(gen)
    {
        for (std::vector<ContainedObject>::iterator it = m_objects.begin();
             it != m_objects.end();
             ++it)
        {
            *it = ContainedObject(s_get_random_integer(lower_bound, upper_bound));
        }
    }
    
    std::vector<ContainedObject> get_satisfying_objects() const
    {
        Predicate pdct = m_gen.get_predicate();
        std::vector<ContainedObject> result;
        
        for (std::vector<ContainedObject>::const_iterator it = m_objects.begin();
             it != m_objects.end();
             ++it)
        {
            if (pdct(it->get_data()))
                result.push_back(*it);
        }
        
        return result;
    }
    
private:
    static int s_get_random_integer(int lower_bound, int upper_bound)
    {
        return lower_bound + (upper_bound - lower_bound) * double(rand()) / RAND_MAX;
    }
    
private:
    std::vector<ContainedObject> m_objects;
    PredicateGenerator m_gen;
};
 
int main()
{
    std::srand(unsigned(std::time(0)));
    
    ContainerGenerator cont(-100, 100, 20, PredicateGenerator(-20, 20));
    
    std::vector<ContainedObject> cond_cont = cont.get_satisfying_objects();
    
    for (std::vector<ContainedObject>::iterator it = cond_cont.begin();
         it != cond_cont.end();
         ++it)
    {
        std::cout << it->get_data() << "  ";
    }
    
    std::cout << std::endl;
    
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru