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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
stecenko28
-9 / 1 / 0
Регистрация: 08.10.2011
Сообщений: 44
#1

Перегрузка оператора [] - C++

09.01.2012, 23:13. Просмотров 4017. Ответов 7
Метки нет (Все метки)

При перегрузке оператора возникли проблемы, подскажыте как правильно перегрузить этот оператор, чтоб можно было устанавливать и получать значение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Vektor {
    private :
        int* element;
        int size;
        Vektor () {};
    public :
        Vektor (int Size) : size(Size) {element = new int[size];};
        ~Vektor () {size = 0; if(element) delete[] element; };
 
        int operator [] (int index) {
            return this->element[index];
        }
 
                      //Сдесь ошыбка
        void operator [] (int index, int value) {
            this->element[index] = value;
        }
 
};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 23:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора [] (C++):

Перегрузка оператора ‘=’ - C++
Подскажите, пожалуйста, можно ли как-то перегрузить оператор равно. Чтобы можно было его использовать как с правой, так и с левой...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора - C++
Добрый день! Мне нужно перегрузить в классе двумерного массива оператор ++, чтобы она возвращал максимальный элемент массива. класс...

Перегрузка оператора + - C++
Не могу заставить работать перегруженный оператор + в функции CMoveByVector Point.h: #define POINT_H #include &lt;iostream&gt; ...

Перегрузка оператора = - C++
Ввести строку символов S1. Программа должна содержать перегруженную операцию “=”, использование которой скопирует S1 в S2 при следующих...

Перегрузка оператора + - C++
Помогите с перегрузкой оператора +. Нужно сложить два объекта - двумерные массивы. сArray operator + (сArray &amp;arr) { int size...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
09.01.2012, 23:31 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Vektor {
        private :
                int* element;
                int size;
        public :
                Vektor (int Size) : size(Size) {element = new int[size];};
                ~Vektor () { delete[] element; };
 
                int& operator [] (int index) {
                        return element[index];
                }
 
                const int& operator [] (int index) const {
                        return element[index];
                }
 
};
3
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
09.01.2012, 23:35 #3
Ссылкой.
Вот как-то так.
C++
1
2
3
4
// один для обычных контекстов
int &operator[](size_t index) { return element[index]; }
// и один для константных контекстов
const int &operator[](size_t index) const { return element[index]; }
1
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
09.01.2012, 23:47 #4

Не по теме:

C++
1
 //Сдесь ошыбка
Ага, в слове "сдесь"


Ваша ошибка была в том что Вы хотели перегрузить оператор [] чтобы он принимал два аргумента, а делать это нельзя. Стандарт гласит что перегружать мы можем почти все операторы, но мы не можем менять количество аргументов что они принимают. Если хотите перегрузить оператор скобки и чтобы он принимал несколько аргументов то перегрузите оператор () - ему можно задать сколько угодно аргументов да и выглядит тоже вполне неплохо, пример:
C++
1
cout<<a(2,3);
1
stecenko28
-9 / 1 / 0
Регистрация: 08.10.2011
Сообщений: 44
09.01.2012, 23:47  [ТС] #5
Спасибо уважаемые форумчане, все оказалось очень просто.
0
silent_1991
09.01.2012, 23:55
  #6

Не по теме:

Gepar, мне "ы" в "ошыбка" не меньше глаз режет...

1
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
10.01.2012, 00:04 #7
rangerx, а поч. ссылка константная?
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
10.01.2012, 00:21 #8
Цитата Сообщение от OstapBender Посмотреть сообщение
а поч. ссылка константная?
Для константного контекста. Без конст. вар. функц. след. код не скомпилир.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class A {
 public:
  A() : data_(new int[10]) {}
  ~A() { delete [] data_; }
  int &operator[](int index) { return data_[index]; }
// константный вариант функции
//  const int &operator[](int index) const { return data_[index]; }
 private:
  A(const A &);
  A &operator=(const A&);
  int *data_;
};
 
int main(int argc, char *argv[]) {
  A simple;
  simple[0] = 0;
  const A constant; // константный объект
  // Без const int &operator[](int) const ошибка
  // GCC error: passing 'const A' as 'this' argument of 'int& A::operator[](int)' discards qualifiers
  std::cout << constant[0];
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2012, 00:21
Привет! Вот еще темы с ответами:

Перегрузка оператора << - C++
Пишу класс My_String #include &lt;iostream&gt; const int MAX = 1000; class My_String { private: char str; public:

Перегрузка оператора += - C++
Есть два класса: Vec4(вектор из 4х float) и Mat4(вектор из 4х Vec4). Проблема в том что при перегрузке в Mat4 операции += я получаю ошибку...

Перегрузка оператора = - C++
Здравствуйте! При попытке заменить объект пользовательского класса q4 на q6 в контейнере set появляется ошибка: error C2678: binary '=' :...

Перегрузка оператора - C++
Здравствуйте, друзья. Помогите пожалуйста найти ошибку, вернее я знаю где, но пока не понимаю как её исправить: //Добавить в строковый...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.01.2012, 00:21
Ответ Создать тему
Опции темы

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