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

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

03.03.2026, 06:59. Показов 5507. Ответов 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
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,236
03.03.2026, 18:43
Студворк — интернет-сервис помощи студентам
Наталья8, на картинке написана неправда. Писал неосилятор
1
1976 / 832 / 115
Регистрация: 01.10.2012
Сообщений: 5,056
Записей в блоге: 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
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,236
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
Заблокирован
03.03.2026, 23:46
Так туда надо именно циферку вписать?
А на переменной эта конструкция не работает?
Не получаеться у меня творчество на этом извращении...


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

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

Как то мудрёно всё.
Могу пользовать string, или vector..
Если явно экономит место. Кучу лишних строк писать не надо.
vector <string> например...
На c_style повторить проблематично.
0
Заблокирован
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
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,236
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
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru