Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
Spo1ler
293 / 53 / 3
Регистрация: 22.05.2008
Сообщений: 788
#1

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

21.09.2008, 12:32. Просмотров 3002. Ответов 9
Метки нет (Все метки)

вообщем есть класс
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 ‘&’ ?)
вообщем я запутался, кто поможет, тому спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2008, 12:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как перегрузить оператор []? (C++):

Как перегрузить оператор<< и оператор>> ? - C++
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу которвя мне помогла бы их решить. вопрос первый. В общем...

Как перегрузить оператор = - C++
ну там чтоб он например сложение делал или чтото другое

Как перегрузить оператор - C++
Вот написал функцию поиска студента по номеру группы. STL list void find() { setlocale( LC_ALL,&quot;Russian&quot; ); if (students.empty())...

Как правильно перегрузить оператор [] = - C++
вот например в классе хранится массив, и допустим я хочу елементу массива в этом классе присвоить другое значение, тоесть так, class...

Как перегрузить оператор разыменования * - C++
Как перегрузить оператор разыменования?

Как перегрузить оператор ввода? - C++
Как перегрузить оператор ввода? rational.h #define _Rational_h_ #include &lt;iostream&gt; using namespace std; int nod(int p,...

9
qwone
9 / 9 / 1
Регистрация: 18.08.2008
Сообщений: 127
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;
        };
а это конструктор.
0
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
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;
}
В общем,суть в том,что оператор [] возвращает указатель на начало строки матрицы, после чего вторым оператором [] задается уже смещение в этой строке.
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]
учите ООП - перегрузка оператора для класса никакого отношения к его соседям не имеет
0
tmp_2008
0 / 0 / 0
Регистрация: 15.10.2008
Сообщений: 12
09.11.2008, 09:22 #5
up

Добавлено через 4 минуты 36 секунд
Всем привет. Можно ли перегрузить оператор [] так, чтоб он возвращал значение моего типа(я определил класс, и надо чтоб при вызове [] возвращался именно он).
Во всех книжках пишут, что можно, а компилятор ругается.
0
Spo1ler
293 / 53 / 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){
    //....
}
Если компилятор соответствует стандарту, то всё должно работать.
И вообще, когда говоришь, что что-то ругается, надо ошибки показывать, телепаты-то в отпуске.
0
xp8
0 / 0 / 0
Регистрация: 12.11.2008
Сообщений: 1
15.11.2008, 21:32 #7
У меня вопрос по этому поводу.
допустим у меня есть структура:
C++
1
2
3
4
5
struct Long
{
int x[NMAX];
};
Long a;
и мне нужно чтобы при обращении к a[i] это было бы равносильно обращению к a.x[i]
как это реализовать?? Заранее спасибо за ответ =)
0
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
15.10.2011, 22:14 #8
Реализуйте класс в котором оператор [] перегружен таким образом что позволяет выполнять чтение символов из указанной позиции файла
0
rangerx
1941 / 1550 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
15.10.2011, 23:03 #9
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
Реализуйте класс в котором оператор [] перегружен таким образом что позволяет выполнять чтение символов из указанной позиции файла
И в чём проблема?
0
alex_x_x
бжни
2454 / 1659 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.10.2011, 23:08 #10
ifstream + tellg + seekg
0
15.10.2011, 23:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 23:08
Привет! Вот еще темы с ответами:

Как перегрузить оператор в виртуальном классе - C++
Помогите пожалста разобраться с перегрузкой операторов в абстрактных классах!!!! Есть чисто виртуальный класс физических величин ...

Как перегрузить оператор ввода из файла? - C++
Допустим у нас есть класс: class A {friend ifstream &amp;operator&gt;&gt;(ifstream &amp;, A &amp;); private: char a; char b; ...

Как в классе перегрузить оператор двойного индексирование? - C++
Вот мой класс.. class Matrix { int ** m; public: Matrix() { srand(time(NULL)); m=new int*;

Как перегрузить оператор для своего класса? - C++
У меня есть класс, .h class Vertex { public: ~Vertex(); Vertex(); double GetX(); double GetY(); double GetZ(); void...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru