![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Vo1Ce |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.4.2010 Репутация: нет Всего: нет |
Надеюсь не повторяюсь. С++
Нужно ?перегрузить опертор? [], в классе с, к примеру, двумерным массивом. Таким оброзом, чтобы обращаться к элементам массива можно было MyClass[line,column], а не как обычно MyClass[line][column] ... Интерисуют конткретно методы перегрузки оператора [] методы реализации такой записи. Это сообщение отредактировал(а) Vo1Ce - 23.4.2010, 10:17 |
|||
|
||||
| ToTToRo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.4.2010 Репутация: нет Всего: нет |
А разве так можно?
|
|||
|
||||
| t_gran |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 13.11.2007 Где: г.Усть-Илимск Репутация: 33 Всего: 37 |
Vo1Ce, вы сами понимаете что написали? Покажите компилятор который это проглотит:
-------------------- Я знаю, что ничего не знаю© Сократ ![]() |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
Vo1Ce, operator[] - бинарный, он поддерживает только один операнд внутри []
вы можете перегрузить operator, (запятую) для своего типа индекса, но тогда придется писать foo[idx_t(1), 1] |
|||
|
||||
| Vo1Ce |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.4.2010 Репутация: нет Всего: нет |
это уже интересней, спасибо. Можно пример какой-нибудь? Я не подумал о возможности перегрузки оператора запятая... Или вообще, есть какие-нибудь ещё методы, чтобы использовать запись [...,...]. (в голову только пирходило то, что бы в [] вводить строку, ну тогда, я не уверен с тем, как избавиться от ввода ковычек. з.ы. каким задание я понял, таким и написал... Может перегрузка [] и не возможна по нескольким операндам, но я думаю теперь суть того, что мне надо ясна... add: что-то я самостоятельно не могу разобраться с перегрузкой запятой. Я как понял, он является и бинарным и унарным в различных случаях? Ну конкретно ничего из него я получить так и не смог... Это сообщение отредактировал(а) Vo1Ce - 23.4.2010, 11:13 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
|
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Vo1Ce, не заморачивайтесь. Перегружайте operator(). Какая вам разница круглые скобки или квадратные?
|
|||
|
||||
| Vo1Ce |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.4.2010 Репутация: нет Всего: нет |
GoldFinch, спасибо, буду разбираться. Идей нет, как можно сделать, чтобы запись всё же не обращалась так явно к классу?
Sartorius, к сожалению задание именно такое =), ничего поделать не могу, не для себя делаю... Это сообщение отредактировал(а) Vo1Ce - 23.4.2010, 20:39 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
Vo1Ce, явное обращение к классу можно заменить явным обращением к переменной этого класса %)
т.е. вместо [T(1), 2] например [t+1, 2] (вместо "+" - любой бинарный оператор, тип t - T) вобщем надо чтобы один из операндов бинарного оператора имел пользовательский тип |
|||
|
||||
| Vo1Ce |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.4.2010 Репутация: нет Всего: нет |
это конечно да, и для меня труда не составит всё оформить =) но интересно узнать, каким образом осуществить именно такую запись [line,column]. Вобщем спасибо GoldFinch, вы мне многим помогли. Но вопрос остаётся не закрытым, если кто знает или узнает методы, сообщите, сдача задачи на след неделе...
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
есть еще один весьма сомнительный способ - объявить глобальные переменные типа index_t
_0, _1, _2, _3, ... (много) т.е. index_t _0(0); index_t _1(1); index_t _2(2); ... в принципе пару сотен таких переменных можно сгенерить скриптом. тогда код будет такой a[_1, 2] причем эти переменные можно объявить не в глобальной области видимости, а в области видимости operator,(index_t, int) |
|||
|
||||
| Vo1Ce |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.4.2010 Репутация: нет Всего: нет |
ух отлично, так у меня получилось, только при обьявлении их в видимости оператора не компилируется... Пишет что не заданы.
А может быть возможным, каким либо образом, обьединие "[" как часть оператора и как идентификатор... т.е. в данном случае запись [[1,2] заменить на [1,2] неким заклинанием? Если всё же кто-то знает или разгадает секрет какого-то метода для записи [...,...] жду с нетерпением, заранее всем спасибо и спасибо всем, кто уже откликнулся. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
||||
|
||||
| Vo1Ce |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.4.2010 Репутация: нет Всего: нет |
Извините, а зашаблонить нельзя как-нибудь опертор запятую. Чтобы например если вводишь один операнд инт и другой инт, то он первый его операнд переделывет в какой-нить класс\структуры с эелментом, равным этому инт и дальше работал так?
И ещё мне предложили использовать макрос, и просто заменить () на []. Но от этого появляются кое-какие неудобства и у меня такой вопрос, вообще обе эти идеи будут работать? и если сделать #define на участок программы где класс , и соответсвенно #undef в конце класса, то при вызове MyClass[1,2] , где в классе [] заменены на (), то компилятор будет жаловаться? кто-нибудь проверить может? Спрашиваю вас, т.к. уехал от рабочего места до понедельника, и сейчас нет возможности проверить это всё. Заранее спасибо. Это сообщение отредактировал(а) Vo1Ce - 24.4.2010, 21:06 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
шаблоны тут не помогут.
с макросом - вообще не понял как это %) |
|||
|
||||
| Vo1Ce |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.4.2010 Репутация: нет Всего: нет |
блин, да, кажется из этого ничто не получится (макрос вообще может быть только именной, что нвоое я для себя узнал =) ). Скоро сдавать надо, может кто может у кого поарспрашивать, например. Нужна конкретно запись [1,2].
Ещё вроде на коуднэтэ наткнулся на старый топик (06 года), заданое такое, но результат вроде не получен, я лишь нашёл код, который позволяет обращаться к массиву вот так int a=1; MyClass[a,2]; но запись MyClass[1,2] не работает ( Там вроде использовались шаблоны на класс (только для инициализации) и шаблон на оператор запятую, если надо найду код сегодня. //Или кто знает на какой форум лучше обартиться, где наверняка могут помочь? Время уже жмёт. Самому видать знаний и практики не хватает =( Это сообщение отредактировал(а) Vo1Ce - 26.4.2010, 17:57 |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |