Большой Воронежский Форум
» Программирование>перегрузка [][] возможна???
HalfSkill 15:43 15.04.2003
Пусть есть класс MY_CLASS. В нем среди прочего SOME_TYPE data[][]. Имея вне класса объявление MY_CLASS mclss можно добраться до [I]data так:
[I]mclss.data
или [I]mclss, если заранее перезгрузить [].

Вопрос.
Как же сделать так, чтобы добраться до [I]data[j] таким путем: [I]mclss[j].
Наверняка ведь можно как-нибудь хитро перегрузить [][], или может существует достойная замена. [Ответ]
RomanPshenichny 16:11 15.04.2003
> Наверняка ведь можно как-нибудь хитро перегрузить [][],
> или может существует достойная замена.

Конечно можно.
Класс двухмерный массив возвращает через operator [] ссылку на одномерный массив, который в свою очередь возвращает через свой operator [] ссылку на сам элемент.

class Array1D
{
public:
char & operator [] ( int index );
};

class Array2D
{
public:
Array1D & operator [] ( int index );
};

Array2D var;
var [1][1] = 'a'; [Ответ]
HalfSkill 17:18 15.04.2003
2RomanPshenichny. Спасибо. Так у меня получалось, а вот чтобы без Array1D обойтись... [Ответ]
RomanPshenichny 17:51 15.04.2003
> Спасибо. Так у меня получалось, а вот чтобы без Array1D
> обойтись...

char & Array2D::operator () ( int x, int y );

? [Ответ]
HalfSkill 18:50 15.04.2003
Спасибо!
Признаться, даже как-то стыдно стало. Я был зациклился на перегрузке [][], а о том, чтобы как с функцией попробовать, и не подумал.
Задача моя куда более емкая, чем этот пример.
Но уже приспособил, попробовал - работает!!! [Ответ]
Вверх