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

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

Восстановить пароль Регистрация
 
Oktaram
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 19
11.09.2012, 19:58     Действия со всеми объектами класса #1
Есть два класса с рядом данных и методов. Через конструктор одного программа создает кучу объектов. Мне надо чтобы из всех объектов выбирались те, которые подходят под данное условие, и с ними выполнялись действия(то есть цикл). Как это сделать? Условие берется из другого класса.

P.S. C++ изучаю недавно.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.09.2012, 23:29     Действия со всеми объектами класса #2
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;
}
Oktaram
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 19
12.09.2012, 22:22  [ТС]     Действия со всеми объектами класса #3
silent_1991, Я мало что понял в этом листинге, так что ничего о нем не говорю, уж извините за такое отношение к вашему труду и потраченному времени.

Вот что-то похожее, но сильно упрощенное(у меня нет доступа к моему компьютеру с Visual Studio), и наверняка содержащее кучу всяких ошибок, так как по вышеуказанной причине писал "по памяти".

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
#include <iostream>
using namespace std;
 
class cars 
{
public:
    cars(char, int, int);
    char name[32];
    int cost;
    int speed;
};
 
cars::cars(char name, int cost, int speed)
{
    strcpy(cars::name, name); 
    cars::cost=cost;
    cars::speed=speed;
};
 
class clients
{
public:
    clients(char, int);
 
    char name[32];
    int money;
};
 
cars::clients(char name, int money)
{
    strcpy(clients::name, name); 
    cars::money=money;
};
 
int main()
{
    cars car1("Car_1", 5000, 100);
    cars car2("Car_2", 10000, 120);
    clients client1("Client_1", 8000);
    clients client2("Client_2", 9000);
    /*Мне надо проверить для каждого объекта класса clients на какие объекты класса cars у него хватит денег. */
    /*То есть что-то вроде вложенного цикла: для каждого клиента проверяется значение .money и сравнивается с .cost каждого авто, и если подходит под условие выводится инфа. Я не знаю как сделать такой цикл */
    getch();
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.09.2012, 22:25     Действия со всеми объектами класса #4
Храните все объекты клиентов и машин в массивах
Yandex
Объявления
12.09.2012, 22:25     Действия со всеми объектами класса
Ответ Создать тему
Опции темы

Текущее время: 05:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru