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

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

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

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

09.01.2012, 23:13. Просмотров 3882. Ответов 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;
        }
 
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 23:13     Перегрузка оператора []
Посмотрите здесь:

Перегрузка оператора + - C++
Осуществляю перегрузку оператора +. и вот почему-то член класса s меняет свою длину с 4 до 7 и мне вот это не понятно.. Подскажите,...

Перегрузка оператора [] - C++
Есть код перегрузки оператора для получения данных из массива. #include <iostream> class obj { private: int *arr; ...

Перегрузка оператора + - C++
Всем привет, проблема на этот раз такая. Для того, чтобы выучить классы, я пишу некое подобие класса string. Сложность вот в чем. Возникла...

Перегрузка оператора ++ - C++
Написал префиксную перегрузку ++ Vremya &Vremya::operator ++ () { int sec = getSec(*this); //перевод в секунды ...

Перегрузка оператора [] - C++
Есть: class any{ char arr }

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

Перегрузка оператора + - C++
Делаю класс полиномов, которые можно складывать и перемножать. Каждый член полинома есть отдельный класс под названием Term. в классе Term...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
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
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
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
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
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
583 / 521 / 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++
Есть два класса: Vec4(вектор из 4х float) и Mat4(вектор из 4х Vec4). Проблема в том что при перегрузке в Mat4 операции += я получаю ошибку...

Перегрузка оператора == - C++
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

Перегрузка оператора -> - C++
скажите, а какие особенности перегрузки -&gt; ?

Перегрузка оператора [] - C++
Сделал простой аналог auto_ptr для дин. массива. Файл #ifndef ARRAY_PTR_GUARD #define ARRAY_PTR_GUARD template&lt; class Ty_ &gt; ...

Перегрузка оператора *= - C++
как для заданного класса point перегрузить оператор *= всеми возможными способами (член класса, друг класса)? P.S. оператор *= должен...


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

Или воспользуйтесь поиском по форуму:
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
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     Перегрузка оператора []
Ответ Создать тему
Опции темы

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