![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 | ||
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
![]()
Всем добрый вечер!
![]() Извините, такой вопрос назрел. Имеем 2 класса, оба используют одинаковые строковые константы в таком виде: В 1 классе: Цитата:
Код:
![]() Проблема вопроса - эти две строковые константы связаны между собой по смыслу. Т.е. в классе 1 строковая константа "один" несет в себе тот же смысл, что и строковая константа "один" в классе 2. Предположим что в дальнейшем я захочу изменить представление этой константы на "Два", заместо "Один", но очень хочется избежать той ситуации, когда придется бегать по всему коду и исправлять старое значение на новое. Подскажите, пожалуйста, корректным ли будет разрешение данной ситуации с помощью определения статического члена класса? В итоге получим: В 1 классе: Цитата:
Код:
![]() Спасибо! Последний раз редактировалось Базиля; 19.12.2013 в 18:43. |
||
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Надо помнить про то, что порядок создания статических объектов в разных единицах компиляции не определен стандартом. Потому лучше сделать статический метод, который вернет эту строку.
|
![]() |
![]() |
![]() |
#3 | ||
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
![]()
Son Of Pain
Спасибо! Цитата:
Ведь инициализация статических членов происходит на стадии компиляции (я сейчас именно про классы) . Тогда что есть " порядок создания статических объектов в разных единицах компиляции не определен стандартом"? Поясните, пожалуйста. Цитата:
Или есть более предпочтительный способ? |
||
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Если строковое поле будет типа std::string, например - это уже объект. Порядок создания таких объектов определен только в рамках одной единицы компиляции. Но об этом можно забыть, и обратиться к нему из инициализатора или конструктора статического объекта в другой единице компиляции. Чтобы избежать потенциальных граблей в этом случае и объявляют метод, возвращающий нужный объект.
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
![]()
А какие проблемы при этом могут возникнуть?
Ошибка компиляции? Компилятор не сможет объединить эти единицы в одно целое? Просто в первые про такой нюанс слышу, в книгах не встречал информации об этом. |
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Компилятор не выдаст ошибку, в том-то и беда. В хороших книгах пишут об этом, в частности в обсуждениях реализации синглтонов на С++.
|
![]() |
![]() |
![]() |
#7 | |
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
![]()
Son Of Pain
А в какой из книг, к примеру, это описывается? Цитата:
![]() Если память под объект выделилась, с чем тогда сложности возникнуть могут. Последний раз редактировалось Базиля; 19.12.2013 в 22:31. |
|
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
У Мейерса в effective c++, например.
Память выделена, но объект в ней еще не проинициализирован. |
![]() |
![]() |
![]() |
#9 |
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
![]()
Благодарю!
Все никак мне не ознакомиться с его книгами , а тут и повод появился ![]() |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 24.04.2012
Сообщений: 300
|
![]()
#define ONE_CONST_STR "один"
Помог? Оставляем отзыв =)
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Статический член класса | halcyon | Visual C++ | 1 | 28.09.2012 21:09 |
Оператор сдвига как член класса | Anubys | Общие вопросы C/C++ | 0 | 25.12.2011 02:44 |
Функция - член класса | Syltan | Общие вопросы C/C++ | 9 | 06.10.2009 23:44 |
Указатеть на функция-член класса | BioS | Общие вопросы C/C++ | 6 | 29.09.2009 00:04 |
Как изменить статический приватный член класса?? | 3dgraph | Помощь студентам | 2 | 07.05.2009 20:06 |