Форум программистов, компьютерный форум CyberForum.ru

Как перегрузить оператор []? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
Spo1ler
 Аватар для Spo1ler
291 / 51 / 3
Регистрация: 22.05.2008
Сообщений: 788
21.09.2008, 12:32     Как перегрузить оператор []? #1
вообщем есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Point{
private:
    int color_id, state;
public:
    //constructors
    Point();
    //destructors
    virtual ~Point();
    //functions
    //color
    void SetColor(int new_color_id);
    int GetColor();
    //state
    void SetState(int new_state_id);
    int GetState();
    Point* operator[](int i){
        return (this+i*sizeof(Point));
    }
};
нужно сделать так, чтобы запись
C++
1
obj2=obj[y][x]; //obj - обьект класса Point
работала. потому, что при записи
C++
1
this->game_field[current_y+i][current_x+1]->GetState==STATE_ENABLED
получаю
ошибка: invalid use of member (did you forget the ‘&’ ?)
вообщем я запутался, кто поможет, тому спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
21.09.2008, 13:16     Как перегрузить оператор []? #2
знаешь !
A у меня перегруженные операторы [] работают так
C++
1
2
3
4
5
6
7
8
9
10
11
12
char & strin::operator[](int offset){
    if(offset>Len)
        return pStr[Len-1];
    else
        return pStr[offset];
    };
char strin::operator[](int offset)const {
    if(offset>Len)
        return pStr[Len-1];
    else
        return pStr[offset];
    };
они просто возвращают значение

Добавлено через 3 минуты 24 секунды
C++
1
2
3
private:
    char * pStr;
    int Len;
это переменные в коде
C++
1
2
3
4
5
    strin(){
        pStr = new char[1];
        pStr[0]='\0';
        Len=0;
        };
а это конструктор.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
21.09.2008, 13:45     Как перегрузить оператор []? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
class Matrix
{
  unsigned int row,col; //Число строк и столбцов
  int *data; //Данные матрицы
  public:
    //Конструктор:
    Matrix(unsigned int r,unsigned int c){data=new int[r*c]; row=r; col=c;
        for(int i=0;i<r;i++) for(int j=0;j<c;j++) data[i+j*col]=i*j;}
    //Деструктор:
    ~Matrix(){if(data!=NULL){delete data; data=NULL;}}
    //Возвращает указатель на нулевой элемент строки r:
    int* operator[](unsigned int r){return data+r*col;}
};
 
int main(void)
{
  Matrix M(10,10);
 
  //M[1] -- указатель на начало строки 1
  //Тогда M[1][1] -- первый элемент первой строки (строки и столбцы нумеруются с нуля!!!)
  
 
  printf("%d %d %d \n",M[1][1],M[2][3],M[5][9]);
 
  return 0;
}
В общем,суть в том,что оператор [] возвращает указатель на начало строки матрицы, после чего вторым оператором [] задается уже смещение в этой строке.
Jes
0 / 0 / 0
Регистрация: 22.10.2008
Сообщений: 7
23.10.2008, 20:25     Как перегрузить оператор []? #4
маразм
C++
1
2
3
Point* operator[](int i){
        return (this+i*sizeof(Point));
    }
если хочешь обращаться как к масиву то обьяви его масивом

C++
1
Point obj[MaxX][MaxY]
учите ООП - перегрузка оператора для класса никакого отношения к его соседям не имеет
tmp_2008
0 / 0 / 0
Регистрация: 15.10.2008
Сообщений: 12
09.11.2008, 09:22     Как перегрузить оператор []? #5
up

Добавлено через 4 минуты 36 секунд
Всем привет. Можно ли перегрузить оператор [] так, чтоб он возвращал значение моего типа(я определил класс, и надо чтоб при вызове [] возвращался именно он).
Во всех книжках пишут, что можно, а компилятор ругается.
Spo1ler
 Аватар для Spo1ler
291 / 51 / 3
Регистрация: 22.05.2008
Сообщений: 788
09.11.2008, 12:46  [ТС]     Как перегрузить оператор []? #6
В классе сделай friend T& operator[](int i) например, или просто T& operator[](int i); Определять потом, если без френда так
Код
T& T::operator[](int i){
    //....
}
Если компилятор соответствует стандарту, то всё должно работать.
И вообще, когда говоришь, что что-то ругается, надо ошибки показывать, телепаты-то в отпуске.
xp8
Сообщений: n/a
15.11.2008, 21:32     Как перегрузить оператор []? #7
У меня вопрос по этому поводу.
допустим у меня есть структура:
C++
1
2
3
4
5
struct Long
{
int x[NMAX];
};
Long a;
и мне нужно чтобы при обращении к a[i] это было бы равносильно обращению к a.x[i]
как это реализовать?? Заранее спасибо за ответ =)
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
15.10.2011, 22:14     Как перегрузить оператор []? #8
Реализуйте класс в котором оператор [] перегружен таким образом что позволяет выполнять чтение символов из указанной позиции файла
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
15.10.2011, 23:03     Как перегрузить оператор []? #9
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
Реализуйте класс в котором оператор [] перегружен таким образом что позволяет выполнять чтение символов из указанной позиции файла
И в чём проблема?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 23:08     Как перегрузить оператор []?
Еще ссылки по теме:

Как перегрузить оператор C++
C++ Как правильно перегрузить оператор [] =
Как перегрузить оператор для своего класса? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
15.10.2011, 23:08     Как перегрузить оператор []? #10
ifstream + tellg + seekg
Yandex
Объявления
15.10.2011, 23:08     Как перегрузить оператор []?
Ответ Создать тему
Опции темы

Текущее время: 08:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru