Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/81: Рейтинг темы: голосов - 81, средняя оценка - 4.68
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
1

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

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

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

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

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

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

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

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

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

Не по теме:

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

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

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

ПРИМЕЧАНИЕ
Этот вопрос практически не отражен в стандарте, поэтому компиляторы ведут себя по-разному. В системе 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  [ТС] 44
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Удивительно, но для константного массива из объектов не встроенного типа задавать инициализацию нулем разрешается. Для этого в классе должен быть определен конструктор без аргументов, который вызывается для инициализации каждого элемента константного поля-массива.
То есть, если я определю свой тип, IntType, к примеру; где будет поле int, то инициализация с удалением константности пройдёт?
Дело в том, что я этот способ предлагал выше в теме, но Evg констатировал тот факт, что это нереализуемо на нижнем уровне.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
13.05.2011, 23:15 45
Например, вполне можно инициализировать константный массив денег, объявленный в качестве поля:
const TMoney ss[10];
Для этого достаточно задать в списке инициализации конструктора инициализацию нулем ss(). Как реально инициализируется такой массив, конечно, зависит от реализации конструктора без аргументов, который вызывается в этом случае.
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
13.05.2011, 23:19  [ТС] 46
ValeryLaptev, проще и изысканней добавить модификатор static.
C const инициализация массива идёт через з.....цу
0
13.05.2011, 23:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2011, 23:19
Помогаю со студенческими работами здесь

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

Размер статического массива
Можно ли задавть размер статического массива во время работы программы? Если нет, то...

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

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


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

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru