перегрузка опрератора []
От: Demokratizator  
Дата: 12.10.04 18:38
Оценка:
Вечер добрый!
Как правильно перегрузить operator[] для класса двумерного массива?
Хотелосьбы получить такое: mas[i][j]

Спасибо!
Step be Step пока от монитора не ослеп!
Re: перегрузка опрератора []
От: Shady Россия  
Дата: 12.10.04 18:46
Оценка: -1
Здравствуйте, Demokratizator, Вы писали:

D>Вечер добрый!

D>Как правильно перегрузить operator[] для класса двумерного массива?
D>Хотелосьбы получить такое: mas[i][j]
D>
D>Спасибо!

Это сделать низзя можешь и не капашиться...
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re: перегрузка опрератора []
От: GarryIV  
Дата: 12.10.04 18:48
Оценка: +1
Hello, Demokratizator!

D> Вечер добрый!

D> Как правильно перегрузить operator[] для класса двумерного массива?
D> Хотелосьбы получить такое: mas[i][j]
D>
D> Спасибо!

Можно сделать чтоб оператор[] класса двумерного массива возвращал некий объект (итератор?) у которого тоже определен оператор[] который в свою очередь возвращает значение.



WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Re[2]: перегрузка опрератора []
От: Кодт Россия  
Дата: 12.10.04 18:54
Оценка:
Здравствуйте, Shady, Вы писали:

S>Это сделать низзя можешь и не капашиться...


Зя!
Нужно возвращать прокси — объект, представляющий модель одномерного массива.
class dim3
{
public:
  data& at(int x, int y, int z);
  data const& at(int x, int y, int z) const;

  template<class D, class H>
  class dim1
  {
    H* host;
    int x, y;
  public:
    dim1(H* host, int x, int y) : host(host), x(x), y(y) {}
    D operator[](int z) const { return host->at(x,y,z); }
  };

  template<class D, class H>
  class dim2
  {
    H* host;
    int x;
  public:
    dim2(H* host, int x) : host(host), x(x) {}
    dim1<D,H> operator[](int y) const { return dim1<D,H>(host,x,y); }
  };

  dim2<dim3      , data&      > operator[](int x)       { return dim2<dim3      , data&      >(this,x); }
  dim2<dim3 const, data const&> operator[](int x) const { return dim2<dim3 const, data const&>(this,x); }
};

Поскольку прокси возвращаются как rvalue, их операторы должны быть const.
Перекуём баги на фичи!
Re: перегрузка опрератора []
От: Carc Россия https://vk.com/gosha_mazov
Дата: 12.10.04 18:56
Оценка:
Здравствуйте, Demokratizator, Вы писали:

D>Вечер добрый!

D>Как правильно перегрузить operator[] для класса двумерного массива?
D>Хотелосьбы получить такое: mas[i][j]
D>
D>Спасибо!

struct A {
struct INDEX {
const int i,j;
INDEX(int ii,int jj):i(ii),j(jj) {};
};
char operator[](const A::INDEX index) {
return m_array[index.i][index.j];
};
private:
char m_array[10][20];
};
Aml Pages Home
Re[3]: перегрузка опрератора []
От: Shady Россия  
Дата: 12.10.04 19:22
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Зя!

я имел ввиду, что нет такого для перегрузки такого оператора [][]
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.