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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
stecenko28
-9 / 1 / 0
Регистрация: 08.10.2011
Сообщений: 44
09.01.2012, 23:13     Перегрузка оператора [] #1
При перегрузке оператора возникли проблемы, подскажыте как правильно перегрузить этот оператор, чтоб можно было устанавливать и получать значение
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;
        }
 
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 23:13     Перегрузка оператора []
Посмотрите здесь:

C++ Перегрузка оператора %
Перегрузка оператора = C++
Перегрузка оператора C++
C++ перегрузка оператора
C++ Перегрузка оператора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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];
                }
 
};
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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]; }
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
09.01.2012, 23:47     Перегрузка оператора [] #4

Не по теме:

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


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

Не по теме:

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

OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
10.01.2012, 00:04     Перегрузка оператора [] #7
rangerx, а поч. ссылка константная?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2012, 00:21     Перегрузка оператора []
Еще ссылки по теме:

C++ Перегрузка оператора ++
Перегрузка оператора *= C++
C++ Перегрузка оператора ++

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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];
}
Yandex
Объявления
10.01.2012, 00:21     Перегрузка оператора []
Ответ Создать тему
Опции темы

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