Форум программистов, компьютерный форум CyberForum.ru

Касательно const и внешних файлов. - C++

Восстановить пароль Регистрация
 
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
13.12.2011, 10:42     Касательно const и внешних файлов. #1
Все мы знаем, что const объявленная в начале модуля...например как глобальная переменная, не дает возможности больше менять значение. Ну как и в любом др. месте программы.
Например у меня есть поле. В начале работы программы я хотел бы установить значения длины и ширины:
const short Sirina =20;
const short Dlina =10;
чтобы всю работу дальнейшую ссылаться на константные величины. соотв. во время работы программы поля не меняются. Но! теперь вопрос! Как задать эти величины константные при начале работы программы?
Вариант например такой, чтоб данные значения хранить в текстовом файлике и при загрузке как бы считывать. хотя...с другой стороны было бы удобней, чтоб в самой программе можно было устанавливать размеры поля, а дальше они были бы константными.
Надеюсь изьяснил суть вопроса доступно. Спасибо всем за помощь!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
13.12.2011, 11:59     Касательно const и внешних файлов. #2
не знаю, может вам класс создать типа такого
C++
1
2
3
4
5
6
7
8
9
struct Settings
{
public:
    Settings(int x, int y): w(x), h(y) {}
 
public:
    const int w;
    const int h;
};
а если нужно в единственном числе чтобы было, то сделать из него синглтон
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
13.12.2011, 12:13  [ТС]     Касательно const и внешних файлов. #3
к стати вот действительно альтернативное решение.надо будет проверить.спасибо.

Добавлено через 9 минут
нет. к сожалению код не рабочий. и константу не хочет присваивать. А вот "синглтон" - это что?
Bers
Заблокирован
13.12.2011, 12:13     Касательно const и внешних файлов. #4
C++
1
2
3
4
5
6
7
8
struct Settings
{
public:
* * Setgs(int x, int y): w(x), h(y) {}
public:
* * const int w;
* * const int h;
};
Ток нужно иметь ввиду, что это "ненастоящие" константы. Они не являются константами времени компиляции, и не обладают свойствами настоящих констант))

хитрая константа не даёт создать обычный массив
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
13.12.2011, 12:15     Касательно const и внешних файлов. #5
Цитата Сообщение от Андрей2011 Посмотреть сообщение
сожалению код не рабочий
почему?

Цитата Сообщение от Андрей2011 Посмотреть сообщение
А вот "синглтон" - это что?
паттерн проектирования, (одиночка)

Добавлено через 51 секунду
поменяйте конструктор .. ошибся я нечайно
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
13.12.2011, 12:30  [ТС]     Касательно const и внешних файлов. #6
Я был не прав. В целом работает. И даже решает мою проблему. Правда код немного доработал:
C++
1
2
3
4
5
6
7
8
9
class TConstPole
{
public:
    TConstPole(const short Sirina=5,const short Dlina=5) :
    FSirina(Sirina), FDlina(Dlina) {}
 
    const short FSirina;
    const short FDlina;
};
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
13.12.2011, 12:35     Касательно const и внешних файлов. #7
Bers, там у вас строка 6 не компилилась при создании массива, так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Settings
{
public:
    Settings(int x, int y): w(x), h(y)
    {
        int A[w]; //вот эта
    }
 
 
public:
    const int w;
    const int h;
};
но тут то все компилится, значит это "настоящие" константы? ))
Bers
Заблокирован
13.12.2011, 12:37     Касательно const и внешних файлов. #8
Цитата Сообщение от PointsEqual Посмотреть сообщение
но тут то все компилится, значит это "настоящие" константы? ))
Ну скажем так, массив статик или стековый с такими константами не сделаешь)
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
13.12.2011, 18:30     Касательно const и внешних файлов. #9
Цитата Сообщение от PointsEqual Посмотреть сообщение
но тут то все компилится, значит это "настоящие" константы?
Это variable-length массив, попробуйте написать вот так:
C++
1
2
3
4
    Settings(int x, int y): w(x), h(y)
    {
        int A[w] = { 0 }; //вот эта
    }
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
13.12.2011, 18:38     Касательно const и внешних файлов. #10
source.cpp:12:21: error: variable-sized object 'A' may not be initialized

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2011, 18:43     Касательно const и внешних файлов.
Еще ссылки по теме:

C++ Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
Обработка строковых данных с использованием внешних файлов C++
C++ Чем отличаются выражения (const int[]){value} от (const int[]){100}

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

Или воспользуйтесь поиском по форуму:
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
13.12.2011, 18:43  [ТС]     Касательно const и внешних файлов. #11
всем спасибо. вроде осознал.
Yandex
Объявления
13.12.2011, 18:43     Касательно const и внешних файлов.
Ответ Создать тему
Опции темы

Текущее время: 16:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru