0 / 0 / 0
Регистрация: 08.12.2020
Сообщений: 23
1

Перегрузка оператора сложения (+=) в классе vector

07.04.2021, 00:27. Показов 2015. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
using namespace std;
template <typename T>
class Array
{
T* arr;
int capacity;
int current;
public:
Array()
{
  arr = new T[1];
  capacity = 1;
  current = 0;
}
 
void push(T data)
    {
        if (current == capacity) {
            T* temp = new T[2 * capacity];
            for (int i = 0; i < capacity; i++) {
                temp[i] = arr[i];
            }
            delete[] arr;
            capacity *= 2;
            arr = temp;
    }
        arr[current] = data;
        current++;
    }
    
void push(int data, int index)
    {
            arr[index] = data;
    }
  
void pop() 
  {
     current--; 
  }
  
int size() 
  {
     return current; 
  }
  
int getcapacity() 
  {
     return capacity; 
  }
 
void print ()
{
  for (int i = 0; i < current; i++)
  cout << arr[i] << " ";
  cout << "\n";
}
 
void ClearArray (int *a, int n)
{
  for (int i = 0; i < n; i++)
  a[i] = 0;
}
~Array()
{
  delete[] arr;
}
friend Array& operator + (Array &p,int z)
{
  p.arr[p.current] = z;
  p.current++;
  return p;
}
T& operator[] (int index)  
{     
  return arr[index]; 
}
 
Array& operator--()
{
    --current;
      return *this;
}
Array& operator--(int)
{
    current=current - 1;
    --(*this); 
    return *this; 
}
friend ostream& operator << (ostream &out, const Array &a)
{
  for (int i = 0; i < a.current; i++) {
      out << a.arr[i] << ' ';
  }
  out  << "\n";
  return out;
}
};
int main() {
Array<int> a;
a.push(20);
a.push(43);
a.push(40);
a.push(60);
a.push(10);
a.push(30);
cout << "Number last element :" << a.size() << endl;
cout << "Array capacity equals :" << a.getcapacity() << endl;
cout << "Array's elements :" << a;
a.push(777,4);
a.pop();
a.print();
--a;
a.print();
a--;
a.print();
a+10;
cout << a;
a[1]=666;
cout << a;
return 0;
}
Есть такой код. Не получается написать перегруженную операцию сложения(+=) с другим динамическим массивом. Помогите пожалуйста

Добавлено через 24 минуты
C++
1
2
3
4
5
6
7
8
friend Array& operator += (Array &d1, Array &d2)
{
  for (int i = 0; i< d1.current; i++)
  {
    d1.arr[i]=d1.arr[i] + d2.arr[i];
    return d1;
  }
}
Написал такой, но он не работает
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2021, 00:27
Ответы с готовыми решениями:

Перегрузка оператора сложения в классе выдает ошибку с деструктором
Здравствуйте, взял у Липманна программу, которую по заданию надо доработать. Ее смысл заключается в...

Перегрузка оператора сложения
Как правильно его реализовать, чтобы складывать координаты отрезков namespace bcs {...

Перегрузка оператора сложения
У меня есть класс, который содержит в себе строку и ее длину. Класс распределяет динамическую...

Перегрузка оператора сложения
Здравствуйте, есть класс: #define MAX_NUM_SIZE 1000 char _from10(int n){ if(n &lt; 10)...

8
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
07.04.2021, 00:37 2
Лучший ответ Сообщение было отмечено killmo45 как решение

Решение

Цитата Сообщение от killmo45 Посмотреть сообщение
Написал такой, но он не работает
Вынесите return за пределы цикла.
Также цикл должен быть до min(d1.current, d2.current).
1
0 / 0 / 0
Регистрация: 08.12.2020
Сообщений: 23
07.04.2021, 00:42  [ТС] 3
как написать такой цикл, поясните пожалуйста
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
07.04.2021, 00:56 4
Я не уверен что именно объяснять, поэтому как-то так...
C++
1
2
3
4
int cap = d1.current < d2.current ? d1.current : d2.current;
for (int i = 0; i < cap; i++)
    d1.arr[i] += d2.arr[i];
return d1;
0
0 / 0 / 0
Регистрация: 08.12.2020
Сообщений: 23
07.04.2021, 01:02  [ТС] 5
То есть
C++
1
d1.current < d2.current ? d1.current : d2.current;
означает, что если d1 < d2, то current в таком случае будет d2, и новые элементы заполнятся вместо пустоты в d1?
Просто если так, то почему-то не срабатывает код
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
07.04.2021, 01:08 6
Лучший ответ Сообщение было отмечено killmo45 как решение

Решение

Гм... Вообще-то это просто выбор минимального из двух значений, чтобы не выйти за пределы массива.
А какой вы себе представляете результат сложения двух массивов разной длины?
0
0 / 0 / 0
Регистрация: 08.12.2020
Сообщений: 23
07.04.2021, 01:17  [ТС] 7
C++
1
2
3
4
5
6
7
friend Array& operator = (Array &d1, Array &d2)
{
  int cap = d1.current < d2.current ? d1.current : d2.current;
    for (int i = 0; i < cap; i++)
        d1.arr[i] = d2.arr[i];
    return d1;
}
Пытаюсь провернуть тоже самое с оператором присваивания, но пишет, что operator must be a non-static member function. Как решить это?
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
07.04.2021, 01:25 8
Присваивание не может быть дружественной функцией.
Также, я конечно не знаю ваших ожиданий, но обычно при присваивании стараются скопировать объект полностью...
C++
1
2
3
4
5
6
7
Array& operator=(const Array& rhs)
{
    current = rhs.current;
    for (int i = 0; i < current; i++)
        arr[i] = rhs.arr[i];
    return *this;
}
0
0 / 0 / 0
Регистрация: 07.04.2021
Сообщений: 24
07.04.2021, 09:16 9
Рекомендую вам посетить сайт kstu.kz
0
07.04.2021, 09:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2021, 09:16
Помогаю со студенческими работами здесь

Перегрузка оператора сложения
Некорректно выводит результат сложения- результат просто не записывается в конечную переменную....

Перегрузка оператора сложения
CComplexVector&amp; operator+ (const CComplexVector&amp; right) { CComplexVector* res = new...

Перегрузка оператора сложения
Здравствуйте! Имеется такой код: class ClassA { public: ClassA() { m =...

Перегрузка оператора сложения
Ребята пожалуйста помогите!!!) Не получается прописать перегрузку оператора сложения в следующем...

Перегрузка оператора сложения
оч надо лабу срочно написать помогите плиз... Разработать программу с демонстрацией механизма...

Перегрузка оператора сложения
Добрый день. Есть вот эта перегрузка оператора сложения для класса многочлена. Polynom...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru