Здравствуйте, Аноним, Вы писали:
А>Что бы в классе константы определялись автоматически, ну например так А>#define ID_ENUM(nID) enum { nID = nID++ };
А>class AA А>{ А>ID_ENUM(value)// value = 0 А>ID_ENUM(value1)//value1 = 1 А>};
Обфускация кода на этапе девелопмента?
Имею скафандр — готов путешествовать!
Re[3]: А возможно ли такое...
От:
Аноним
Дата:
02.07.04 14:18
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>class AA А>>{ А>>ID_ENUM(value)// value = 0 А>>ID_ENUM(value1)//value1 = 1 А>>}; А>Попробуй скомпилить.
А>Кстати, почему value 0, а value1 1 ?????
Вопрос можно ли как-нибудь генерировать в классе константы(отличные от друг друга) автоматически?
Здравствуйте, <Аноним>, Вы писали:
А>Что бы в классе константы определялись автоматически, ну например так А>#define ID_ENUM(nID) enum { nID = nID++ };
А>class AA А>{ А>ID_ENUM(value)// value = 0 А>ID_ENUM(value1)//value1 = 1 А>};
А>Вопрос можно ли как-нибудь генерировать в классе константы(отличные от друг друга) автоматически?
Можно — используй enum
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: А возможно ли такое...
От:
Аноним
Дата:
02.07.04 14:28
Оценка:
Здравствуйте, maq, Вы писали:
maq>Здравствуйте, <Аноним>, Вы писали:
А>>Что бы в классе константы определялись автоматически, ну например так А>>#define ID_ENUM(nID) enum { nID = nID++ };
А>>class AA А>>{ А>>ID_ENUM(value)// value = 0 А>>ID_ENUM(value1)//value1 = 1 А>>};
maq>А нельзя просто использовать enum внутри класса?
maq>
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, maq, Вы писали:
maq>>Здравствуйте, <Аноним>, Вы писали:
А>>>Что бы в классе константы определялись автоматически, ну например так А>>>#define ID_ENUM(nID) enum { nID = nID++ };
А>>>class AA А>>>{ А>>>ID_ENUM(value)// value = 0 А>>>ID_ENUM(value1)//value1 = 1 А>>>};
maq>>А нельзя просто использовать enum внутри класса?
maq>>
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, maq, Вы писали:
maq>>>Здравствуйте, <Аноним>, Вы писали:
А>>>>Что бы в классе константы определялись автоматически, ну например так А>>>>#define ID_ENUM(nID) enum { nID = nID++ };
А>>>>class AA А>>>>{ А>>>>ID_ENUM(value)// value = 0 А>>>>ID_ENUM(value1)//value1 = 1 А>>>>};
maq>>>А нельзя просто использовать enum внутри класса?
maq>>>
А>>>И что гарантировано value != value1??? LVV>>да. По умолчанию value = 0, А каждая следующая +1, то есть value1 = 1 А>Так просто??? Не может того быть
enum — это перечислимый тип.
Фактически это ряд именованных целых констант. Причем, каждой ты можешь назначить конкретное значение. Например, месяцы ты можешь задать такими константами:
enum month = { jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec };
А потом объявить переменные:
month M = jan;
Более того, для enum разрешается перегрузка операций — я написал об этом джовольно подробено в своей книжке
"C++.Экспресс-курс", издательство БХВ-Петербург, 2004г.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Фактически это ряд именованных целых констант.
Вот это вызывает вопрос.
У Джефа Элджера в "Нетривиальное программирование на С++" написано, что члены перечисления это макросы. Но язык С++ у Джефа Элджера зачастую от компиляторов со стандартами независимый. (Нет-нет, я его не упрекаю, книга вышла года за два до стандарта)
В стандарте 7.2/1 написано, что это — именованные константы.
У вас написано, что это — именованные целые константы. Посмотрим:
Здравствуйте, Sir Wiz, Вы писали:
SW>Здравствуйте, LaptevVV, Вы писали:
LVV>>Фактически это ряд именованных целых констант. SW>Вот это вызывает вопрос.
SW>У Джефа Элджера в "Нетривиальное программирование на С++" написано, что члены перечисления это макросы. Но язык С++ у Джефа Элджера зачастую от компиляторов со стандартами независимый. (Нет-нет, я его не упрекаю, книга вышла года за два до стандарта)
А причем здесь, до стандарта? Перечисления в C существуют с незапамятных времен. И никогда макросами они не были -- это полный бред.
SW>В стандарте 7.2/1 написано, что это — именованные константы.
Лучше сказать -- именованое константное значение.
SW>У вас написано, что это — именованные целые константы. Посмотрим:
SW>
Здравствуйте, Шахтер, Вы писали:
SW>>У Джефа Элджера в "Нетривиальное программирование на С++" написано, что члены перечисления это макросы. Но язык С++ у Джефа Элджера зачастую от компиляторов со стандартами независимый. (Нет-нет, я его не упрекаю, книга вышла года за два до стандарта) Ш>А причем здесь, до стандарта? Перечисления в C существуют с незапамятных времен. И никогда макросами они не были -- это полный бред.
Да, согласен. Так написано у Элджера. Упоминание С считаю некорректным, это всё-таки разные языки.
SW>>В стандарте 7.2/1 написано, что это — именованные константы. Ш>Лучше сказать -- именованое константное значение.
Возможно. Но английским языком написано "named constants"
Ш>А ты не пробовал делать так? Ш>
Ш>const int * pz = &12345; // Ба-бах!
Ш>
Стоп. Сарказм мне понятен, но 12345 это литерал интегрального типа (integer literal), описан в стандарте C++ 2.13.1
А вот словосочетание named constant упоминается в стандарте два раза и оба раза относительно перечислений. Описания того, что это такое, я не нашел, поэтому счёл возможным интерпретировать named constant, как нечто похожее на
Здравствуйте, Sir Wiz, Вы писали:
SW>Стоп. Сарказм мне понятен, но 12345 это литерал интегрального типа (integer literal), описан в стандарте C++ 2.13.1 SW>А вот словосочетание named constant упоминается в стандарте два раза и оба раза относительно перечислений. Описания того, что это такое, я не нашел, поэтому счёл возможным интерпретировать named constant, как нечто похожее на
SW>
SW>const int zero = 0;
SW>
SW>Чем не именованная константа?
SW>Кто же возьмётся прояснить этот вопрос?
Перечислители ведут себя подобно литералам. Т.е. с ними не связаны какие-либо объекты.