С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 32
1

Ошибка в перегрузке оператора пересечения

28.05.2015, 21:45. Показов 621. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пожалуйста, помогите найти ошибку!
При перегрузке оператора пересечения (*) в return tmp возникает ошибка.
ООП только учу, поэтому еще злостно туплю и не пойму в чем именно ошибка.
Пожалуйста, растолкуйте на пальцах

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
123
124
#include <iostream>
#include <ctime>
using namespace std;
class Vector
{
private:
    int *mas;
    int size;
public:
    Vector()
    {
        size = 0;
        mas = new int[size];
    }
    Vector(int n)
    {
        size = n;
        mas = new int[size];
    }
    Vector(Vector&obj)
    {
        size = obj.size;
        mas = new int[size];
        for (int i = 0; i <size; i++)
        {
            mas[i] = obj.mas[i];
        }
    }
    operator int(){
        return *mas;
    }
 
    void Initial()
    {
        for (int i = 0; i < size; i++)
        {
            mas[i] = rand() % +10;
        }
    }
    void Show()
    {
        for (int i = 0; i <size; i++)
        {
            cout << mas[i] << "\t";
        }
        cout << endl;
    }
    Vector & operator*( Vector&obj)
    {
        Vector tmp;
        tmp.size = size;
        tmp.mas = new int[tmp.size];
        int k = 0;
        for (int i = 0; i <size; i++)
        {
            for (int j = 0; j < obj.size; j++)
            {
                if (mas[i] == obj.mas[j])
                {
                    tmp.mas[k] = mas[i];
                    k++;
                    break;
                }
            }
        }
        return tmp;
    }
    Vector & operator=(const Vector&obj)
    {
        if (this == &obj)  return *this;
        if (mas != NULL) delete[]mas;
        size = obj.size;
        mas = new int[size];
        for (int i = 0; i < size; i++)
        {
            mas[i] = obj.mas[i];
        }
        return *this;
    }
    
    bool operator ==( Vector &obj)
    {   
            for (int i = 0; i < size; i++)
                return mas[i] == obj.mas[i];
        }
    bool operator !=(Vector &obj)
    {
        for (int i = 0; i < size; i++)
            return mas[i] != obj.mas[i];
    }
 
    ~Vector()
    {
        delete[] mas;
    }
 
};
 
void main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    Vector A(5);
    Vector B(5);
    Vector C(5);
    Vector D(5);
    A.Initial();
    cout << " A:";
    A.Show();
    cout << " B:";
    B = A;
    B.Show();
    C.Initial();
    cout << " C:";
    C.Show();
    if (B == A) { cout << "Объекты А и В равны!\n"; }
    else { cout << "Объекты А и В не равны!\n"; }
    if (C == A) { cout << "Объекты С и А равны!\n"; }
    else { cout << "Объекты С и А не равны!\n"; }
    cout << "Проверка на пересечение объектов С и А:\n";
    D = C*A;
    D.Show();
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2015, 21:45
Ответы с готовыми решениями:

Ошибка в перегрузке оператора +=
В строках 42-50 пытаюсь описать перегрузку операции +=, но выдаёт ошибку слишком много операторов...

Ошибка в перегрузке оператора
Не пойму в чем дело(( Имеется класс вектор ,вычислил длину,а теперь очу сравнить их величины,но не...

Ошибка в перегрузке оператора =
В классе множество нужно перегрузить оператор = так, чтобы была возможность присвоить f(x)=const....

Ошибка в перегрузке оператора +=
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; const int da=256; class stroki ...

4
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,933
Записей в блоге: 1
28.05.2015, 21:48 2
Ссылку на локальный объект возвращаете
0
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 32
28.05.2015, 22:33  [ТС] 3
так там есть конструктор копирования , по идее же он должен сработать для правильного копирования локального объекта...?
0
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,933
Записей в блоге: 1
29.05.2015, 02:53 4
Цитата Сообщение от u-geen Посмотреть сообщение
по идее же он должен сработать для правильного копирования локального объекта...?
нет. Вы же возвращаете ссылку, а не объект класса.
Переделайте
C++
1
Vector & operator*( Vector&obj)
на
C++
1
Vector operator*( Vector&obj)
И не забывайте про const там, где нужно
1
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 32
29.05.2015, 08:39  [ТС] 5
с
Vector operator*( Vector&obj)
дает ошибку invalid allocation size
уже все варианты испробованы наверное, а исправить не могу....
0
29.05.2015, 08:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2015, 08:39
Помогаю со студенческими работами здесь

Ошибка при перегрузке оператора ==
У меня компилятор выдает ошибку error LNK2019: ссылка на неразрешенный внешний символ &quot;bool __cdecl...

Ошибка при перегрузке оператора +
Имеется класс, который представляет из себя строку и количество символов в ней. Задача -...

Ошибка при перегрузке оператора >>
Приветствую. Есть 2 класса: enum Color { white = 1, red, green, blue, yellow }; class Shape {...

Ошибка при перегрузке оператора <<
class Predmet { private: int id; string name; public: Predmet() {}; Predmet(string name,...

Ошибка при перегрузке оператора ввода
Решил для тренировки написать класс, который создает связанный список, типа массива. Проблеме при...

Ошибка при перегрузке оператора cin >>
#include &lt;iostream&gt; using namespace std; ...


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

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