
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
перегрузка [][] возможна???
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#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]. Наверняка ведь можно как-нибудь хитро перегрузить [][], или может существует достойная замена. |
|
|
|
|
#2 |
|
Форумец
Сообщений: 334
Регистрация: 14.04.2003
Возраст: 44
|
Re: перегрузка [][] возможна???
> Наверняка ведь можно как-нибудь хитро перегрузить [][],
> или может существует достойная замена. Конечно можно. Класс двухмерный массив возвращает через operator [] ссылку на одномерный массив, который в свою очередь возвращает через свой operator [] ссылку на сам элемент. class Array1D { public: char & operator [] ( int index ); }; class Array2D { public: Array1D & operator [] ( int index ); }; Array2D var; var [1][1] = 'a'; |
|
|
|
|
#4 |
|
Форумец
Сообщений: 334
Регистрация: 14.04.2003
Возраст: 44
|
> Спасибо. Так у меня получалось, а вот чтобы без Array1D
> обойтись... char & Array2D::operator () ( int x, int y ); ? |
|
|
|
|
#5 |
|
молчун
Сообщений: 53
Регистрация: 26.01.2003
|
Спасибо!
Признаться, даже как-то стыдно стало. Я был зациклился на перегрузке [][], а о том, чтобы как с функцией попробовать, и не подумал. Задача моя куда более емкая, чем этот пример. Но уже приспособил, попробовал - работает!!! |
|
|