11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456

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

03.03.2026, 06:59. Показов 6765. Ответов 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
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
03.03.2026, 18:43
Студворк — интернет-сервис помощи студентам
Наталья8, на картинке написана неправда. Писал неосилятор
1
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,208
Записей в блоге: 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
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
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
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
03.03.2026, 23:46
Так туда надо именно циферку вписать?
А на переменной эта конструкция не работает?
Не получаеться у меня творчество на этом извращении...


Константой я всё вокруг обзывал... Не прёт...
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
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
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
04.03.2026, 01:23
0
фрилансер
 Аватар для Алексей1153
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
04.03.2026, 06:15
Цитата Сообщение от Наталья8 Посмотреть сообщение
Так туда надо именно циферку вписать?
constexpr выражение
например, литерал (циферка)

в твоём случае проще std::vector использовать
1
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
04.03.2026, 14:12
Серьёзно? Не люблю я вектора, стринги, сишные функции люблю.
Мне кажеться они более коректно работают.
Может просто кажеться...
000d60,
Вообще - решение должно быть простое... Чем проще тем лучше.
А класс я, только для вас навалял.. Он там на фик не нужен.
0
фрилансер
 Аватар для Алексей1153
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
04.03.2026, 14:55
Наталья8, тебе кажется
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,447
04.03.2026, 15:01
Цитата Сообщение от Наталья8 Посмотреть сообщение
сишные функции люблю.
может ты просто отстал от жизни?
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
04.03.2026, 15:26
Наоборот, Я к ним недавно пристал. Бывало и на string писал.
Бывало и глюки, mandavoshki ловил...
Особенно на wstring..
Долго потом чешешь репу. От куда они взялись?
Работа string посложнее простого масcива си style.
Мало ли что в процессе может случиться.
Я как то явно вижу в голове процесс с_style...
На string как то не то...
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
04.03.2026, 15:27

Как то мудрёно всё.
Могу пользовать string, или vector..
Если явно экономит место. Кучу лишних строк писать не надо.
vector <string> например...
На c_style повторить проблематично.
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
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 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
05.03.2026, 19:45
Алексей1153, так-то легко стать неосилятором, когда тебе в язык почти весь boost из прежних времён запихнули. Чтобы сказать "я знаю C++" в восьмидесятые, программисту Си надо было выучить наследование, полиморфизм и инкапсуляцию классов - три фичи, четыре, wiki говорит - ещё аргумент по умолчанию.
Чтобы сказать "я знаю C++" сегодня, надо хотя бы весь STL вызубрить для начала. Причём пока все предметные области не осилишь, которые даже на практике в одном проекте не попадаются - не говоришь, что выучил плюсы.
0
фрилансер
 Аватар для Алексей1153
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
05.03.2026, 19:50
Kuzia domovenok, никто не заставляет всё зубрить и всё использовать. Для начала конструктор и деструктор освоить - это уже хорошо
0
Заблокирован
05.03.2026, 20:18
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Чтобы сказать "я знаю C++" в восьмидесятые, программисту Си надо было выучить наследование, полиморфизм и инкапсуляцию классов - три фичи, четыре, wiki говорит - ещё аргумент по умолчанию.
Не знаю что там в 80-ых. И можно ли то назвать С++.
Но даже если взять с++98/03 то никто не отменял: области видимости, время жизни объектов и ещё много базовых аспектов.
Шаблоны так же уже начинали своё развитие.
p.s. Да и вообще, можно взять стандарт(а то что до него и С++ назвать нельзя) и посмотреть количество страниц.


Да и вообще, к чему это? Да, раньше, как говорят учёные, хомо с палкой и голой жопой бегали.
0
 Аватар для CoderHuligan
1754 / 1020 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
06.03.2026, 13:29
.
Чтобы сказать "я знаю C++" сегодня, надо хотя бы весь STL вызубрить для начала. Причём пока все предметные области не осилишь, которые даже на практике в одном проекте не попадаются - не говоришь, что выучил плюсы.
C++ если честно не является единым монолитным языком с поддержкой обратной совместимости. По сути есть подмножество различных языков разных версий. Не даром в компиляторах можно указывать версию. Это потому что обратная совместимость давно нарушена. То есть вопрос "я знаю c++" бессмысленен. Надо уточнять какой стандарт знаешь. Это безумие.
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru