Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перегрузка оператора [], перегрузка оператора 
:(
    Опции темы
smoke_man
Дата 24.9.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 1
Всего: 17



Добрый вечер! Сталкнулся с такой проблемой: знаю как перегрузить оператор [] для одномерного массива - а как перегрузить его для 2-х мерного(3-х мерного), и вобще возможно ли это? Спасибо!


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Daevaorn
Дата 24.9.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(smoke_man @  24.9.2007,  23:19 Найти цитируемый пост)
а как перегрузить его для 2-х мерного(3-х мерного), и вобще возможно ли это? Спасибо! 

напрямую нельзя. можно сделать некую эмуляции этого через прокси классы. в интернете этот вопрос освещен достаточно хорошо. да и на форуме проскакивало не раз уже.
PM MAIL WWW   Вверх
DjoNIK
Дата 24.9.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Daevaorn дал дельный совет, я ошибался

Это сообщение отредактировал(а) DjoNIK - 24.9.2007, 22:24


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
smoke_man
Дата 24.9.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 1
Всего: 17



Просто до этого использывал property(с++ builder) для доступа, но при использовании перегрузки операторов + и - компилятор выдает ошибку на эти свойства(Classes with properties cannot be copied by value).


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
EnergoHokum
Дата 25.9.2007, 15:51 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



У Элджера приводится такой пример:
Код

struct Index
{
    int x,y;
    Index(int ex,int why) : x(ex),y(why) {;}
    bool operator==(const Index& i) { return x == i.x && y == i.y; }
};

class WorkFine
{
public:
    Foo& operator[](Index& i);
};

array[Index(17,29)].MemberOfFoo();

Я сильно не разбирался, но должно работать вроде...
PM MAIL ICQ   Вверх
smoke_man
Дата 26.9.2007, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 1
Всего: 17



Все намного проще:
Код

template <class T> class TContainer
{
          public:
          T **data;
          int Size;
          int i;
          T & operator [](int j)
          {
                if(j<0||j>Size) throw;
                return data[i][j];
          }
};

template <class T> class TMatrix
{
           private:
           T **data;
           ........
           public:
           TMatrix(int x,int y)
          {
                     //Создается массив
                     //После создания и настройки
                     row.Size = y;
                     row.data = data; 
           }
           TContainer <T> row;
           TContainer & operator [] (int i)
           {
                  row.i = i;
                  return i;
           }
}



Может быть кому-нубудь это пригодится....


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
smoke_man
Дата 26.9.2007, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 1
Всего: 17



Только вот ошибочку нашел:
Код

TContainer & operator [] (int i)
{
      row.i = i;
      return row;
}

Тогда присоздании класса к элементу можно обращаться так:
Код

TMatrix <float> a(3,3);
a[0][0] = 0;



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.