Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
перегрузка [][] возможна??? |
Философия, технологии, алгоритмы! |
|
Опции темы |
15.04.2003, 15:43 | #1 |
молчун
Сообщений: 53
Регистрация: 26.01.2003
Не в сети |
перегрузка [][] возможна???
Пусть есть класс MY_CLASS. В нем среди прочего SOME_TYPE data[][]. Имея вне класса объявление MY_CLASS mclss можно добраться до [I]data так:
[I]mclss.data или [I]mclss, если заранее перезгрузить []. Вопрос. Как же сделать так, чтобы добраться до [I]data[j] таким путем: [I]mclss[j]. Наверняка ведь можно как-нибудь хитро перегрузить [][], или может существует достойная замена. |
15.04.2003, 16:11 | #2 |
Форумец
Сообщений: 334
Регистрация: 14.04.2003
Возраст: 42
Не в сети |
Re: перегрузка [][] возможна???
> Наверняка ведь можно как-нибудь хитро перегрузить [][],
> или может существует достойная замена. Конечно можно. Класс двухмерный массив возвращает через operator [] ссылку на одномерный массив, который в свою очередь возвращает через свой operator [] ссылку на сам элемент. class Array1D { public: char & operator [] ( int index ); }; class Array2D { public: Array1D & operator [] ( int index ); }; Array2D var; var [1][1] = 'a'; |
15.04.2003, 17:51 | #4 |
Форумец
Сообщений: 334
Регистрация: 14.04.2003
Возраст: 42
Не в сети |
> Спасибо. Так у меня получалось, а вот чтобы без Array1D
> обойтись... char & Array2D::operator () ( int x, int y ); ? |
15.04.2003, 18:50 | #5 |
молчун
Сообщений: 53
Регистрация: 26.01.2003
Не в сети |
Спасибо!
Признаться, даже как-то стыдно стало. Я был зациклился на перегрузке [][], а о том, чтобы как с функцией попробовать, и не подумал. Задача моя куда более емкая, чем этот пример. Но уже приспособил, попробовал - работает!!! |