Старый 15.04.2003, 15:43   #1   
молчун
 
Сообщений: 53
Регистрация: 26.01.2003

HalfSkill вне форума Не в сети
Question перегрузка [][] возможна???

Пусть есть класс 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   
Форумец
 
Аватар для RomanPshenichny
 
Сообщений: 334
Регистрация: 14.04.2003
Возраст: 42

RomanPshenichny вне форума Не в сети
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:18   #3   
молчун
 
Сообщений: 53
Регистрация: 26.01.2003

HalfSkill вне форума Не в сети
2RomanPshenichny. Спасибо. Так у меня получалось, а вот чтобы без Array1D обойтись...
  Ответить с цитированием
Старый 15.04.2003, 17:51   #4   
Форумец
 
Аватар для RomanPshenichny
 
Сообщений: 334
Регистрация: 14.04.2003
Возраст: 42

RomanPshenichny вне форума Не в сети
> Спасибо. Так у меня получалось, а вот чтобы без Array1D
> обойтись...

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

?
  Ответить с цитированием
Старый 15.04.2003, 18:50   #5   
молчун
 
Сообщений: 53
Регистрация: 26.01.2003

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



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind