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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.70
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
#1

Перегрузка операторов для класса МАССИВ - C++

15.04.2012, 14:13. Просмотров 3779. Ответов 10

Привет.

Есть класс "вектор" ("массив"), нужно переопределить операторы =, +, - , *, +=, -=, *= с целым числом.

=, +=, -=, *=,[] как функции члены
+, - , * как дружественные функции

Вопрос вот в чем. Не важно каким образом переопределяем, но как добраться до определенного эл-та? например
C++
1
a[2] = 5;
или
C++
1
b = a[3] + 5;
в первом случае надо переопределить оператор = , во втором +, чтобы все работало. Вопрос в том, как компилятору дать знать что сначала был эл. с индексом 2, а после с индексом 3. Может после будет индекс 4444 - как это организовать в программе?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 14:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов для класса МАССИВ (C++):

Перегрузка операторов для класса - C++
class A { private: size_t i; public: size_t i_get() { return i; } };

Перегрузка операторов для класса polynom - C++
Создаю класс полиномов (polynom), в нём надо перегрузить ряд операторов. Где-то нашёл пример, где оператор сложения перегружается так: ...

Перегрузка операторов для класса треугольника - C++
Дан класс Треугольник, включающий в себя закрытые поля для сторон и медиан. Указать все необходимые функции инициализации и доступа к...

Перегрузка операторов для класса матриц - C++
Собственно, суть проблемы. Пишу класс матриц (хочется), оператор присваивания работает только тогда, когда функция (ну или, например,...

Перегрузка операторов для класса Треугольник - C++
Задание: Перегрузить операторы >, <, == для класса Треугольник относительно сравнения площадей объектов данного класса. Сделать то же...

Класс "Дроби" и перегрузка операторов для этого класса - C++
Всем Доброго времени суток. Есть учебная задача по условиям которой необходимо реализовать класс "Дроби" и перегрузку операторов для...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
15.04.2012, 20:10 #2
C++
1
a[2] = 5;
если a[2] возвращает ссылку на int, то будет вызван operator= клаcса int ( а не класса вектор ), с operator+ то же самое
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
15.04.2012, 20:31 #3
А чтобы добраться до нужного элемента надо переопределить,
operator[](int);
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
15.04.2012, 21:49  [ТС] #4
zss, то есть?

igorrr37, соответственно что? я не прав?
на что ссылку нужно возвращать тогда?
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
16.04.2012, 21:20 #5
C++
1
2
3
4
5
6
7
class vector
{
   double *x;
public:
   double& operator[](int n){return x[n];}
 
};
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
17.04.2012, 00:13  [ТС] #6
ааа блин

столько ждал ответа на неправильно заданный вопрос.

[] я уже давно переопределил.
C++
1
2
3
4
5
6
7
int& Int::operator[](int iter) {
    if(iter > size-1) {
        cout << error[1];
 
    }
    return mas[iter];
}
Я видимо забыл написать, извиняюсь. Я имею в виду м... переопределяя оператор = или + или что-то еще мне нужно передать туда номер элемента.
Например:
C++
1
a[5] = x;
Как в перегрузке оператора дать компилятору знать что мы работает с 5ым элементом?
Или например:
C++
1
x = x + a[985423];
Понятно что работаем с переменной x и элементом класса, которому принадлежит a, но как дать знать компилятору что мы работаем с 985423 элементом?
Вот перегрузка:
C++
1
2
3
4
friend int operator+(Int& _obj, int odd) {
_obj.data = _obj.data + odd;
return _obj.data;
}
Как дать знать что мы собираемся работать с 985423 элементом?

Не надо говорить, что я перегрузил неправильно Я знаю. Я не понимаю КАК это сделать Скажите хоть в какую сторону копать)
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
17.04.2012, 12:09 #7
Пример, как сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Vec
{
    int v[2];
public:
        Vec(){v[0]=v[1]=0;}
        int& operator[](int i) {return v[i];}
};
 
int main() 
{
    Vec v1;
    v1[1]=1;
    int a=4+v1[1];
    return 0;
}
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
17.04.2012, 19:19  [ТС] #8
zss, у меня есть перегрузка оператора []
Прочитайте пост выше
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
17.04.2012, 19:35 #9
Цитата Сообщение от VladSharikov Посмотреть сообщение
меня есть перегрузка оператора []
Я продепонстрировал, как использовать:
v1[1]=1; - присвоение значения второму элементу.
a=4+v1[1] - чтение второго элемента
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
17.04.2012, 19:39  [ТС] #10
Цитата Сообщение от zss Посмотреть сообщение
a=4+v1[1]
переменная a - целочисленная переменная, v1[1] возвращает так же целочисленную переменную. Данное выражение использует стандартную не перегруженную операцию int "+".
Мне нужно перегрузить оператор МОЕГО класса.
C++
1
    friend int operator+(Int& _obj,  int odd);
Но в этой функции мы работаем со ВСЕМ массивом, а мне нужно работать с конкретным элементом массива.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
17.04.2012, 21:31 #11
Конкретный элемент массива имеет тип int,
поэтому для него надо использовать стандартную
операцию сложения целых чисел.
Если перегрузить operator+ для массива,
то и складывать надо массивы целиком.
А у Вас вопрос был как сложить отдельные элементы,
т.е. целые числа.
А к какому элементу обращаетесь - не важно, лишь бы для него была выделена память.
b=a[4444]+5;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2012, 21:31
Привет! Вот еще темы с ответами:

Перегрузка операторов для класса "множество целых чисел" - C++
Собственно, в этом и вопрос. Как перегрузить операторы &quot;+&quot; и &quot;-&quot; для объединение и разности двух множеств?

Перегрузка операторов (==, <<, >>, +) для класса "Денежная сумма" - C++
Реализовать класс «Денежная сумма». Данные класса: размер суммы, код валюты, курс по отношению к доллару. Операции: сложение двух сумм,...

Перегрузка операторов для класса "Матрица" - C++
Доброго времени суток. Помогите довести до ума код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;math.h&quot;...

Перегрузка операторов ==, !=, <, > для класса "Дробь" - C++
Не могу найти ошибку, почему то числитель второй дроби увеличивается... Думал может что-то с конструкторами, но вроди все ок... Алгоритмы...


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

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

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