9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255

Инициализация статического массива

08.05.2011, 23:37. Показов 18542. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Допустим, что имеется класс
C++
1
2
3
4
5
6
7
class A
{
....
public:
static int array[];
....
};
Как инициализировать массив в stdafx.h, если в нём будет 700 элементов, вводимых не вручную?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2011, 23:37
Ответы с готовыми решениями:

Инициализация статического массива
Ребята, помогите пожалуйста. Не получается проинициализировать NULL-ами статиеский массив указателей. Пишет слудеющее (прикрепил скриншот)....

Инициализация статического поля
Добрый день, как объяснить необходимость объявить все статические поля, даже те у которых есть конструктор по умолчанию, вне класса до...

Инициализация статического члена из шаблонного класса
Добрый день. Есть код: template<int test> class Test { template<int a> struct Inner { static bool...

45
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21282 / 8307 / 637
Регистрация: 30.03.2009
Сообщений: 22,668
Записей в блоге: 30
13.05.2011, 19:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alexsvk Посмотреть сообщение
На счёт класса, здесь используется static. Интерес же был на счёт использования const БЕЗ static
Вообще НЕ статические const поля класса можно инициализировать только в конструкторе. Причём не в теле конструктора, а через двоеточие. Как это делать для массивов - я не знаю. И как-то не разу не видел таких конструкций. Может их вообще и нет, хотя по логике они ничему не противоречат. Через гугл во всяком случае ничего интересного не нашёл: все предлагают миллион способов как это сделать через ж...у, но нигде не увидел явно сказанных слов про то, что по честному в Си++ это сделать нельзя

Если тебе массив нужно проинициализировать константным значением, то такая конструкция, ко всему прочему, лишена смысла - зачем в каждом экземпляре класса плодить одинаково инициализированные поля, если можно использовать статическое поле
1
13.05.2011, 20:17  [ТС]

Не по теме:

Информационная тема вышла..:)

0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
13.05.2011, 20:23
Это еще не все...

Как это ни странно, но большие проблемы возникают при попытках объявить в классе константный массив встроенного типа! Как мы уже выяснили, константы нельзя инициализировать в теле конструктора, значения им присваиваются только в списке инициализации конструктора. Однако для константного массива встроенного типа не работает даже инициализация нулем.

ПРИМЕЧАНИЕ
Этот вопрос практически не отражен в стандарте, поэтому компиляторы ведут себя по-разному. В системе Visual C++.NET 2003 выдается ошибка компиляции C2439, а Borland C++ Builder 6 выдает только предупреждение W8038 о том, что массив не инициализируется.

Не проходит и отмена константности. Например, зададим массив m0 как константный, а в теле конструктора определим инициализацию в цикле:
C++
1
2
for (int i = 0; i < 10; ++i) 
    const_cast<int>(m0[i]) = 0;
Однако и Visual C++.NET 2003, и Borland C++ Builder 6 отказываются компилировать такой цикл.
Удивительно, но для константного массива из объектов не встроенного типа задавать инициализацию нулем разрешается. Для этого в классе должен быть определен конструктор без аргументов, который вызывается для инициализации каждого элемента константного поля-массива.
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
13.05.2011, 20:35  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Удивительно, но для константного массива из объектов не встроенного типа задавать инициализацию нулем разрешается. Для этого в классе должен быть определен конструктор без аргументов, который вызывается для инициализации каждого элемента константного поля-массива.
То есть, если я определю свой тип, IntType, к примеру; где будет поле int, то инициализация с удалением константности пройдёт?
Дело в том, что я этот способ предлагал выше в теме, но Evg констатировал тот факт, что это нереализуемо на нижнем уровне.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
13.05.2011, 23:15
Например, вполне можно инициализировать константный массив денег, объявленный в качестве поля:
const TMoney ss[10];
Для этого достаточно задать в списке инициализации конструктора инициализацию нулем ss(). Как реально инициализируется такой массив, конечно, зависит от реализации конструктора без аргументов, который вызывается в этом случае.
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
13.05.2011, 23:19  [ТС]
ValeryLaptev, проще и изысканней добавить модификатор static.
C const инициализация массива идёт через з.....цу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2011, 23:19

Инициализация константного статического объекта - члена класса
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является членом класса. Этот объект должен быть...

Инициализация статического члена std::vector в шаблонном классе
есть класс myclass , владеющий классом struct template&lt;class T&gt; class myclass { struct mystruct {}; public: static...

Размер статического массива
Можно ли задавть размер статического массива во время работы программы? Если нет, то почему?#include &lt;iostream&gt; using namespace...

Обнуление статического массива
Нужна помощь с обнулением массива,который записан в файл и выведен на экран Надо его обнулить и снова записать в файл и на экран вывести ...

Из статического массива в динамический
Здравствуйте . Помогите , пожалуйста , переделать эту программу(сортировку) , чтобы она работала с динамическим массивом . #include...


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

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

Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru