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

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

03.03.2026, 06:59. Показов 4766. Ответов 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
6466 / 5686 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
03.03.2026, 18:43
Студворк — интернет-сервис помощи студентам
Наталья8, на картинке написана неправда. Писал неосилятор
1
1972 / 828 / 115
Регистрация: 01.10.2012
Сообщений: 4,970
Записей в блоге: 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
6466 / 5686 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
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
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,073
03.03.2026, 23:46
Так туда надо именно циферку вписать?
А на переменной эта конструкция не работает?
Не получаеться у меня творчество на этом извращении...


Константой я всё вокруг обзывал... Не прёт...
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,073
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
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,073
04.03.2026, 01:23
0
фрилансер
 Аватар для Алексей1153
6466 / 5686 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
04.03.2026, 06:15
Цитата Сообщение от Наталья8 Посмотреть сообщение
Так туда надо именно циферку вписать?
constexpr выражение
например, литерал (циферка)

в твоём случае проще std::vector использовать
1
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,073
04.03.2026, 14:12
Серьёзно? Не люблю я вектора, стринги, сишные функции люблю.
Мне кажеться они более коректно работают.
Может просто кажеться...
000d60,
Вообще - решение должно быть простое... Чем проще тем лучше.
А класс я, только для вас навалял.. Он там на фик не нужен.
0
фрилансер
 Аватар для Алексей1153
6466 / 5686 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
04.03.2026, 14:55
Наталья8, тебе кажется
0
 Аватар для vlisp
1065 / 986 / 153
Регистрация: 10.08.2015
Сообщений: 5,389
04.03.2026, 15:01
Цитата Сообщение от Наталья8 Посмотреть сообщение
сишные функции люблю.
может ты просто отстал от жизни?
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,073
04.03.2026, 15:26
Наоборот, Я к ним недавно пристал. Бывало и на string писал.
Бывало и глюки, mandavoshki ловил...
Особенно на wstring..
Долго потом чешешь репу. От куда они взялись?
Работа string посложнее простого масcива си style.
Мало ли что в процессе может случиться.
Я как то явно вижу в голове процесс с_style...
На string как то не то...
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,073
04.03.2026, 15:27

Как то мудрёно всё.
Могу пользовать string, или vector..
Если явно экономит место. Кучу лишних строк писать не надо.
vector <string> например...
На c_style повторить проблематично.
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,073
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,536
Записей в блоге: 1
05.03.2026, 19:45
Алексей1153, так-то легко стать неосилятором, когда тебе в язык почти весь boost из прежних времён запихнули. Чтобы сказать "я знаю C++" в восьмидесятые, программисту Си надо было выучить наследование, полиморфизм и инкапсуляцию классов - три фичи, четыре, wiki говорит - ещё аргумент по умолчанию.
Чтобы сказать "я знаю C++" сегодня, надо хотя бы весь STL вызубрить для начала. Причём пока все предметные области не осилишь, которые даже на практике в одном проекте не попадаются - не говоришь, что выучил плюсы.
0
фрилансер
 Аватар для Алексей1153
6466 / 5686 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
05.03.2026, 19:50
Kuzia domovenok, никто не заставляет всё зубрить и всё использовать. Для начала конструктор и деструктор освоить - это уже хорошо
0
20 / 17 / 3
Регистрация: 16.12.2025
Сообщений: 134
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,536
Записей в блоге: 1
06.03.2026, 16:12
000d60, шаблоны появились не в первой версии С++ а ближе к 1990 году, Стандарт вообще в 98 появился.
Я про то творение, что сделал лично Страуструп и впервые назвал новым языком.
CoderHuligan, я больше про то, что сложно быть специалистом C++ по сети и многопоточности и одновременно по CUDA вычислениям и графике, разбираться в легаси коде и одновременно последнем стандарте.
0
20 / 17 / 3
Регистрация: 16.12.2025
Сообщений: 134
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
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru