Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456

Вариативный размер массива в разных экземплярах класса

03.03.2026, 06:59. Показов 6067. Ответов 74
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста как задать размер статического массива в каждом экземпляре класса?
C++
1
2
3
4
5
class uart
{
 static const BUF_SIZE = 128;     
 uint8_t buf[BUF_SIZE];    
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2026, 06:59
Ответы с готовыми решениями:

Разное значение переменной класса, в разных экземплярах класса
Вот примерный код: class Test { private: static int countC; static int countD;...

О экземплярах класса
Приветствую. Есть класс Websocket .h/.cpp В websocket.cpp #include "websocket.h" ...

Найти элементы массива А, которые не повторяются и одновременно есть в массиве B в нескольких экземплярах
Всем привет, помогите пожалуйста довести код до ума, что бы выполнялось задание, которое описано в...

74
фрилансер
 Аватар для Алексей1153
6495 / 5726 / 1133
Регистрация: 11.10.2019
Сообщений: 15,287
03.03.2026, 18:43
Студворк — интернет-сервис помощи студентам
Наталья8, на картинке написана неправда. Писал неосилятор
1
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,115
Записей в блоге: 2
03.03.2026, 18:50
Цитата Сообщение от Korbofos Посмотреть сообщение
как задать размер статического массива в каждом экземпляре класса?
Никак, все экземпляры одного класса имеют один sizeof. Темплейт создает разные классы что часто неудобно
Цитата Сообщение от Korbofos Посмотреть сообщение
Да не очень получается, отдельно под каждый уарт свой класс. В принципе как сейчас и есть реализация. Динамическую память не хочется использовать в мк
Что за "мк" не знаю, но если надо без контейнеров/указателей, то можно так
C++
1
2
3
4
5
6
7
8
struct uart
{
 size_t bufSize;     
 size_t bufOffset;    
 static uint8_t * heap;
 ...
 unit8_t * data( void ) { return heap + bufOffset; }
};
Один блок (на всех) все-таки выделить придется
0
фрилансер
 Аватар для Алексей1153
6495 / 5726 / 1133
Регистрация: 11.10.2019
Сообщений: 15,287
03.03.2026, 19:59
Цитата Сообщение от Igor3D Посмотреть сообщение
Темплейт создает разные классы что часто неудобно
шаблон - это как раз наоборот - часто удобно

Добавлено через 2 минуты
Цитата Сообщение от Korbofos Посмотреть сообщение
Динамическую память не хочется использовать в мк
а что останавливает? Много таких объектов? Или часто пересоздаются ?
0
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
03.03.2026, 20:36  [ТС]
Direct Memory Access работает с этим массивом uint8_t buf[BUF_SIZE]. Нужны 2,3 экземпляра этого класса usart_1 usart_2 и т.д. Сейчас юзаю под каждый уарт свой класс со своим буфером. Экземпляр класса создаётся глобально
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,231
03.03.2026, 23:46
Так туда надо именно циферку вписать?
А на переменной эта конструкция не работает?
Не получаеться у меня творчество на этом извращении...


Константой я всё вокруг обзывал... Не прёт...
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,231
04.03.2026, 01:19
Цитата Сообщение от Алексей1153 Посмотреть сообщение
на картинке написана неправда
Когда нибудь я осилю... Если до этого не крякну...

Добавлено через 1 час 27 минут
Только так могу... Неоригинально совсем.

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
class uart
{
private:
    char*ptr;
public:
    // Конструктор
    uart(size_t n) {
        ptr = (char*)calloc(n,sizeof(char) );
    }
~uart() {
        free(ptr);
        ptr = NULL;
        }
    char *get_ptr() { return ptr; }
};
 
 
 
int main()
{
    system("chcp 1251");
    typedef unsigned char uchar;
    int lt = 208;
    const char *phrase = u8"Если вы думаете, что на что-то способны, вы правы; Hello World! если думаете,"
         "что у вас ничего не получится — вы тоже правы. Генри Форд";
    int count_rus{};
    for (int i = 0; i < strlen(phrase); ++i)
        if ((uchar)phrase[i] == lt || (uchar)phrase[i] == lt + 1)++count_rus;
    else if ((uchar)phrase[i] == 226)count_rus += 3;// Это трёхбайтовый знак
 
uart u1(strlen(phrase) - count_rus);
char *line_output = u1.get_ptr();
int num{};
for (int i = 0; i < strlen(phrase); ++i) {
 
    if ((uchar)phrase[i] == lt) { num = 48; continue; }
    else if ((uchar)phrase[i] == lt + 1) { num = 112; continue; }
    else if ((uchar)phrase[i] == 226) { ++i; ++i; num = 0; continue; }// Это трёхбайтовый знак
    
        char mov = phrase[i] + num;
    strncat(line_output, &mov, 1 );
num = 0;
}
 
std::cout << line_output;
    getchar();
}
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,231
04.03.2026, 01:23
0
фрилансер
 Аватар для Алексей1153
6495 / 5726 / 1133
Регистрация: 11.10.2019
Сообщений: 15,287
04.03.2026, 06:15
Цитата Сообщение от Наталья8 Посмотреть сообщение
Так туда надо именно циферку вписать?
constexpr выражение
например, литерал (циферка)

в твоём случае проще std::vector использовать
1
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,231
04.03.2026, 14:12
Серьёзно? Не люблю я вектора, стринги, сишные функции люблю.
Мне кажеться они более коректно работают.
Может просто кажеться...
000d60,
Вообще - решение должно быть простое... Чем проще тем лучше.
А класс я, только для вас навалял.. Он там на фик не нужен.
0
фрилансер
 Аватар для Алексей1153
6495 / 5726 / 1133
Регистрация: 11.10.2019
Сообщений: 15,287
04.03.2026, 14:55
Наталья8, тебе кажется
0
 Аватар для vlisp
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,413
04.03.2026, 15:01
Цитата Сообщение от Наталья8 Посмотреть сообщение
сишные функции люблю.
может ты просто отстал от жизни?
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,231
04.03.2026, 15:26
Наоборот, Я к ним недавно пристал. Бывало и на string писал.
Бывало и глюки, mandavoshki ловил...
Особенно на wstring..
Долго потом чешешь репу. От куда они взялись?
Работа string посложнее простого масcива си style.
Мало ли что в процессе может случиться.
Я как то явно вижу в голове процесс с_style...
На string как то не то...
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,231
04.03.2026, 15:27

Как то мудрёно всё.
Могу пользовать string, или vector..
Если явно экономит место. Кучу лишних строк писать не надо.
vector <string> например...
На c_style повторить проблематично.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,231
04.03.2026, 15:39
Бывало и вот так например...

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
//------------------------------
    short ln_cout{}; // Открываем файл в фолдере экзешника и читаем, заполняем двумерный массив...
        std::string line;
    std::ifstream fin(cmd_line);
        if (fin.is_open())
            while (getline(fin, line))// =============== Читаем текст - editing_the_ =======
            {// 
                bool one{ true };
                char *cut_ptr = &line[0];
                while (*cut_ptr != '\0') {
                    if (*cut_ptr != ';')// Здесь раскидать по разделителям <;> в матрицу
                        strncat(collection[ln_cout], cut_ptr, 1);
                    else {
                        if (one != true) {
// Здесь и будет один айпишник, вставленный в строку матрицы
                    if (strncmp(collection[ln_cout], ln_active.c_str(), strlen(collection[ln_cout])) == 0) {
                            size_t pos = line.find(";");// Первое слово из строки текста из файла на раб. столе (Страна)
                                ln_active = line.substr(0, pos);
                                         }
                            size_t count{ strlen(collection[ln_cout]) };
                            char *mov = collection[ln_cout] + strlen(collection[ln_cout]) - 1;// Ты ноль переносил (-1 обязательно)
                    for (size_t i = count; i > 0; --i)
                        {
                                *(mov + 10) = *(mov); mov -= 1;
                        }// Переместить содержимое строки в право и вставить десять знаков (Кому щас легко)
                            memcpy(collection[ln_cout], "я_дерево   ", 10);
                        }
                        one = false;
                        ++ln_cout;
                        }
                    cut_ptr++;
                }
            }
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
05.03.2026, 19:45
Алексей1153, так-то легко стать неосилятором, когда тебе в язык почти весь boost из прежних времён запихнули. Чтобы сказать "я знаю C++" в восьмидесятые, программисту Си надо было выучить наследование, полиморфизм и инкапсуляцию классов - три фичи, четыре, wiki говорит - ещё аргумент по умолчанию.
Чтобы сказать "я знаю C++" сегодня, надо хотя бы весь STL вызубрить для начала. Причём пока все предметные области не осилишь, которые даже на практике в одном проекте не попадаются - не говоришь, что выучил плюсы.
0
фрилансер
 Аватар для Алексей1153
6495 / 5726 / 1133
Регистрация: 11.10.2019
Сообщений: 15,287
05.03.2026, 19:50
Kuzia domovenok, никто не заставляет всё зубрить и всё использовать. Для начала конструктор и деструктор освоить - это уже хорошо
0
Заблокирован
05.03.2026, 20:18
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Чтобы сказать "я знаю C++" в восьмидесятые, программисту Си надо было выучить наследование, полиморфизм и инкапсуляцию классов - три фичи, четыре, wiki говорит - ещё аргумент по умолчанию.
Не знаю что там в 80-ых. И можно ли то назвать С++.
Но даже если взять с++98/03 то никто не отменял: области видимости, время жизни объектов и ещё много базовых аспектов.
Шаблоны так же уже начинали своё развитие.
p.s. Да и вообще, можно взять стандарт(а то что до него и С++ назвать нельзя) и посмотреть количество страниц.


Да и вообще, к чему это? Да, раньше, как говорят учёные, хомо с палкой и голой жопой бегали.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
06.03.2026, 13:29
.
Чтобы сказать "я знаю C++" сегодня, надо хотя бы весь STL вызубрить для начала. Причём пока все предметные области не осилишь, которые даже на практике в одном проекте не попадаются - не говоришь, что выучил плюсы.
C++ если честно не является единым монолитным языком с поддержкой обратной совместимости. По сути есть подмножество различных языков разных версий. Не даром в компиляторах можно указывать версию. Это потому что обратная совместимость давно нарушена. То есть вопрос "я знаю c++" бессмысленен. Надо уточнять какой стандарт знаешь. Это безумие.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
06.03.2026, 16:12
000d60, шаблоны появились не в первой версии С++ а ближе к 1990 году, Стандарт вообще в 98 появился.
Я про то творение, что сделал лично Страуструп и впервые назвал новым языком.
CoderHuligan, я больше про то, что сложно быть специалистом C++ по сети и многопоточности и одновременно по CUDA вычислениям и графике, разбираться в легаси коде и одновременно последнем стандарте.
0
Заблокирован
06.03.2026, 19:22
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
я больше про то, что сложно быть специалистом C++ по сети и многопоточности и одновременно по CUDA вычислениям и графике, разбираться в легаси коде и одновременно последнем стандарте.
Это же естественно.
Как по другому? Другие ЯП за месяц - "и швец, и жнец, и на дуде игрец"?
Если да, то открой мне этот чудо ЯП.

Никто и не спорит, что С++ сложнее и многообразнее, вероятно, всех ЯП.
Но вот претензии и/или жалобы не понятны.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2026, 19:22

Найти элементы, присутствующие в нескольких экземплярах либо только в массиве А, либо только в массиве B
Нужно найти элементы, присутствующие в нескольких экземплярах либо только в массиве А, либо только...

Вывести элементы, которые есть в массиве А в нескольких экземплярах и отсутствуют в массиве В
Задание : вывести на экран элементы, которые есть в массиве А в нескольких экземплярах и...

2-мерные массивы: Вызов конструктора портит данные в других экземплярах
Проблема: обнаружилось, что порой пропадают числа из существующих экземпляров класса. Числа...

Элементы, которые есть в нескольких экземплярах в Массиве А и отсутствуют в Массиве В
Задание : вывести на экран элементы, которые есть в массиве А в нескольких экземплярах и...

Найти элементы, которые есть в массиве А в нескольких экземплярах и отсутствуют в массиве В
Задание : вывести на экран элементы, которые есть в массиве А в нескольких экземплярах и...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru