Можно ли перегрузить оператор инкремента для enum?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Можно ли перегрузить оператор инкремента для enum?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Оператор инкремента/декремента работает лишь с переменными, а enum (перечислитель) является набором констант. Если же написать некий собственный класс, в котором перегруженные операторы инкремента/декремента будут выполнять функции навигатора списка и возвращать соответствующие константы перечислителя, то это вполне реализуемо.
Или подразумевается не возможность ввести с потока? Так иттераторы тоже с потока не вводятся. И за какой это решёткой родился загадочный возврат константы? Константа - она на то и константа, что она просто есть и для неё не нужны функции и операторы, аenum TPosition {NoPosition=0, Left=1, Top=2, FirstRight=3, SecondRight=4, LeftBottom=5, Bottom=6, RightBottom=7};
TPosition Position=Left;
Position=Top; // Здесь происходит присваивание, что с констами не совместимо.
Код: Выделить всё
return 14;
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Несколько раз перечитал последний пост, но так и не смог его понять. Если переформулируешь, то попробую ответить.
Единственное, что мне понятно, это вот этот комент.
Единственное, что мне понятно, это вот этот комент.
И я скажу, что всё здесь в порядке. Константа стоит справа, а Position - это не константа, а переменная типа TPosition. Эта переменная без проблем может меняться в ходе выполнения программы.Position=Top; // Здесь происходит присваивание, что с констами не совместимо.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Вот именно. А тип у неё какой?Romeo писал(а):Константа стоит справа, а Position - это не константа, а переменная типа TPosition. Эта переменная без проблем может меняться в ходе выполнения программы.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Я же написал. Внимательнее прочти. У переменной Position тип TPosition.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
А что такое в данном случае TPosition?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
TPosition - это тип, который является enum'ом.
Его элементы (Left, Top и т.д.) являются константами.
Postion является переменной типа TPosition. Изначально она инициализируется константой Left, затем меняет своё значение на Top.
Его элементы (Left, Top и т.д.) являются константами.
Postion является переменной типа TPosition. Изначально она инициализируется константой Left, затем меняет своё значение на Top.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
В принципе enum - это обычный unsigned int, просто с возможностью именования и проверкой компилятором, диапазонов
It's a long way to the top if you wanna rock'n'roll
Вот именно. Но почему то этот тип "набора констант" имеет переменная. На смом деле набор констант - это константный массив, например,Romeo писал(а):TPosition - это тип, который является enum'ом.
Код: Выделить всё
const a:array [1..8] of TColor=(clRed, clGreen, clBlue, clBlack, clWhite, clGray, clYellow, clAqua);
Код: Выделить всё
enum TPosition {NoPosition=0, Left=1, Top=2, FirstRight=3, SecondRight=4, LeftBottom=5, Bottom=6, RightBottom=7};
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.