Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
1

Обращение ко всему массиву в классах

08.06.2015, 15:08. Показов 1626. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef unsigned int ui;
 
class Location
{
private:
    std::string nameOfLocation;
    int amountOfCompartments;
public:
    Location();
    void setNameOfLocation(std::string);
    std::string getNameOfLocation() const;
    int getAmountOfCompartments() const;
    bool hasBrokenCompartments(Location *);
};
Описание методов класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Location.h"
 
Location::Location(){nameOfLocation = ""; amountOfCompartments = 4;}
 
void Location::setNameOfLocation(std::string nameOfLocation){this->nameOfLocation = nameOfLocation;}
 
std::string Location::getNameOfLocation() const {return nameOfLocation;}
 
int Location::getAmountOfCompartments() const {return amountOfCompartments;}
 
bool Location::hasBrokenCompartments(Location *locations)
{
    for(ui i = 0; i < 6; i++)
        if(locations[i].getAmountOfCompartments() < 4)
            return true;
 
    return false;
}
К методу (hasBrokenCompartments), который выдает true, если есть хоть один сломанный compartment в массиве и false, если все compartments целые, приходиться обращаться таким образом

C++
1
2
Location locations[6];
locations[0].hasBrokenCompartments(locations)
Как можно изменить код, чтобы обращаться ко всему массиву, без лишних упоминаний слова locations, тоесть, что-то типо такого locations.hasBrokenCompartments()

Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2015, 15:08
Ответы с готовыми решениями:

Присвоение значений всему массиву
Друзья, подскажите, пожалуйста. Есть в Delphi оператор или команда, с помощью которой можно присвоить одно значение сразу всем элементам...

Применять к одному, а применяется ко всему массиву
Привет всем, не знаю есть ли такое, но все же спрошу, к примеру есть класс MyClass в котором очень много полей, и если массив классов...

Как реализовать замену по всему массиву?
Подскажите пожалуйста как реализовать замену по всему массиву? Дан массив, который содержит строки, заменяться должны слова в каждой...

7
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.06.2015, 15:15 2
у вас нарушена логика - зачем яблоку знать есть ли в ящике гнилое? Каждое яблоко отвечает за себя, менеджер яблок хранит в себе массив яблок и может обратиться к каждому яблоку и спросить у него только про его состояние.
0
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
08.06.2015, 15:21  [ТС] 3
rikimaru2013, получается, если я захочу узнать, есть ли в массиве гнилое яблоко, то без цыкла мне не обойтись?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.06.2015, 15:25 4
Получается, чтобы утвержать, что в ящике нету гнилого яблока, надо "перебрать" все яблоки. Лучше всего делать такую однотипную процедуру через цикл.
0
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
08.06.2015, 15:29  [ТС] 5
rikimaru2013, а если мне нужно найти индекс корзины в которой меньше всего яблок, там ведь не получиться уже сделать также, как в предущем случае.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.06.2015, 15:36 6
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
#include <vector>
using namespace std;
enum class Color
{
    NOSET,
 
    RED,
    GREEN,
    YELLOW,
};
class Apple
{
private:
    Color m_color;
    bool m_isBad;
 
public:
    bool isBad() const
    {
        return m_isBad;
    }
    Color getColor() const
    {
        return m_color;
    }
};
class AppleManager
{
private:
    std::vector<Apple> m_arrApple;
 
public:
    int countOfBad() const
    {
        int result = 0;
        if(!m_arrApple.empty())
        {
            for(auto it = m_arrApple.begin(); it != m_arrApple.end(); it++)
            {
                if((*it).isBad())
                {
                    result++;
                }
            }
        }
        return result;
    }
    int countOfColor(const Color color) const
    {
        int result = 0;
        if(!m_arrApple.empty())
        {
            for(auto it = m_arrApple.begin(); it != m_arrApple.end(); it++)
            {
                if((*it).getColor() == color)
                {
                    result++;
                }
            }
        }
        return result;
    }
};
Добавлено через 3 минуты
Если у нас подмножество корзин с яблоками
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
class AppleManager
{
    typedef std::vector<Apple> Basket;
private:
 
    std::vector<Basket> m_arrApple;
 
public:
    int countOfBad() const
    {
        int result = 0;
        if(!m_arrApple.empty())
        {
            for(auto it = m_arrApple.begin(); it != m_arrApple.end(); it++)
            {
                
                if(!(*it).empty())
                {
                    for(int i = 0; i < (*it).size(); i++)
                    {
                        if((*it)[i].isBad())
                        {
                            result++;
                        }
                    }
                }
 
            }
        }
        return result;
    }
};
Добавлено через 3 минуты
ящик с наймен кол яблок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int smallestBasket() const
    {
        int min = INT_MAX;
        int index = -1;
        if(!m_arrApple.empty())
        {
            for(int i = 0; i < m_arrApple.size(); i++)
            {
                if(m_arrApple[i].size() < min)
                {
                    min = m_arrApple[i].size();
                    index = i;
                }
            }
        }
 
        return index;
    }
1
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
08.06.2015, 15:37  [ТС] 7
rikimaru2013, ну это не совсем то. Мне же нужно не количество испорченных яблок, а индекс корзины к торой больше всего испорченых яблок.
А, сорри, не обновил страницу. Попробую разобраться. Спасибо.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.06.2015, 15:42 8
Цитата Сообщение от Leonman Посмотреть сообщение
rikimaru2013, ну это не совсем то. Мне же нужно не количество испорченных яблок, а индекс корзины к торой больше всего испорченых яблок.
ща будет мой господин

Добавлено через 4 минуты
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
int indexOfBasketWithMostBadApples() const
    {
        int max = -1;
        int index = -1;
        if(!m_arrApple.empty())
        {
            for(int i = 0; i < m_arrApple.size(); i++)
            {
                int count = 0;
                if(!m_arrApple[i].empty())
                {
                    for(int q = 0; q < m_arrApple[i].size(); q++)
                    {
                        if(m_arrApple[i][q].isBad())
                        {
                            count++;
                        }
                    }
                    if(count > max)
                    {
                        max = count;
                        index = i;
                    }
                }
            }
        }
        return index ;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2015, 15:42
Помогаю со студенческими работами здесь

Switch Case производит итерацию по всему массиву
Всем здравствуйте! Столкнулся с очень странной проблемой: есть матрица 10 строк, 3 столбца. Матрица заполняется char'ами, далее идет...

Введенный с клавиатуры массив отсортировать в алфавитном порядке по всему массиву
Введенный с клавиатуры массив,произвольного размера состоящий из латинских букв отсортировать: а)в алфавитном порядке по всему массиву. ...

Обнулить строки матрицы, среднее арифметическое которых меньше среднего арифметического по всему массиву
В двумерном целочисленном массиве размера N на K обнулить строки, среднее арифметическое которых меньше среднего арифметического по всему...

Обращение к массиву
Всем доброго времени суток. Есть код, который при выполнение вызывает определенный магазин под номером 10001. Но только один: ...

Обращение к массиву
Добрый день, не смотря на тривиальную тему заголовка вопросы у меня серьезные: 1. Как создать массивы (arr1, arr2, arrn) в цикле for....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru