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

Перегрузка операции присваивания и сложения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В данной действительной матрице m*n (n>=3, m>=3), поменять местами строки с номерами 2 и n-1 http://www.cyberforum.ru/cpp-beginners/thread964773.html
В данной действительной матрице m*n (n>=3, m>=3), поменять местами строки с номерами 2 и n-1
C++ Операции над множествами Найти A B C, A ∩ B ∩ C, (A ∩ B) C, A ∩ (B C), если A={{1;2},{1;3},{2}}, B={{1;2;4},{2;3},{1}}, C={{1;3},{1}} Как вручную решить знаю, а вот как запрограммировать понятия не имею! http://www.cyberforum.ru/cpp-beginners/thread964769.html
Если x является степенью числа n, то вывести true C++
Нужно составить циклы с операторами while, do while, for. Вот условие: Даны целые числа x (>0) и n (>0). Если x является степенью числа n, то вывести true, иначе - false
C++ Подскажите, чио писать в теле цикла if ele
Как написать цикл if или if else по заданному условию? Даны целые числа n, m, k и логическая переменная t. Вичислить res=ложь, если (n+2)=m или (n+4)=k, в противном случае (n>m) && !b
C++ Создать класс прямая призма http://www.cyberforum.ru/cpp-beginners/thread964739.html
Создать класс, в котором указываются сведения о прямой призме, в основе которой лежит правильный восьмиугольник. В классе описать поля для сохранения высоты призмы и длины стороны ее основания (действительные числа). В классе также должны быть описаны следующие функции: а) введение данных о призму с клавиатуры; б) вывод данных о призму на экран; в) вычисление площади полной поверхности...
C++ Несколько программ одновременно Здравствуйте, уважаемые форумчане. Вопрос такой. В CODE BLOKS я одновременно могу держать в левом окне несколько проектов программ. Как это сделать в Visual C++. Что-то не получается, когда открываю ещё один существующий проект предыдущий закрывается. Можно ли сделать, чтобы в обозревателе было одновременно несколько проектов и как это сделать ? подробнее

Показать сообщение отдельно
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
29.09.2013, 12:52     Перегрузка операции присваивания и сложения
Необходимо составить описание класса для определения одномерных массивов целых чисел. Границы индексов можно задавать произвольно, т.е. массив не обязательно начинается с нуля.

При попытке сложения массивов выскакивает ошибка ("нарушение прав доступа при чтении по адресу"). Укажите ошибку, пожалуйста.

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include "stdafx.h"
#include <iostream>
#include <locale.h>
 
using namespace std;
 
class Vect {
    int nach, kon, *mas, *mas2;
public:
    Vect () { nach = 0; kon = 0; } 
    Vect (int n, int k);
    Vect (Vect&a); 
    void setVect (int n, int k);
    ~Vect () { delete [] mas; } 
    int getNach () { return nach; }
    int getKon () { return kon; }
    int& operator[] (int i);
    Vect& operator= (Vect& vector);
    Vect operator+ (Vect& vector);
};
 
int menu1();
int menu2();
 
Vect::Vect (int n, int k) {
    nach = n; 
    kon = k; 
    int *mas = new int [k-n+1]; 
    mas2 = mas + n;
}
 
void Vect::setVect (int n, int k) { 
    nach = n; 
    kon = k; 
    int *mas = new int [k-n+1]; 
    mas2 = mas + n;
    for (int i = nach; i < kon+1; i++)
        cin >> mas2[i];
} 
 
Vect::Vect (Vect&a) {
    nach = a.nach;
    kon = a.kon;
    int *mas = new int [kon-nach+1]; 
    mas2 = mas + nach;
    for (int i = nach; i < kon+1; i++)
        mas2[i] = a[i];
}
 
int& Vect::operator[] (int i) {
    if (i < nach || i > kon) {
        cout << "Неверный индекс." << endl;
        system("pause");
        exit(0);
    }
    return mas2[i];
}
 
Vect& Vect::operator= (Vect& vector) {
    nach = vector.nach;
    kon = vector.kon;
    int *mas = new int [kon-nach+1]; 
    mas2 = mas + nach;
    for (int i = nach; i < kon+1; i++)
        mas2[i] = vector[i];
    return *this;
}
 
Vect Vect::operator+ (Vect& vector) {
    Vect vector3(vector.nach, vector.kon);
    for (int i = nach; i < kon+1; i++) {
        vector3[i] = mas2[i] + vector[i];
    }
    return vector3;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    Vect vector, vector2, vector3;
    bool men1 = true, men2 = true;
    int n, k, elem;
 
    while (men1) {
        system("cls");
        if (menu1() == 1) { // создание нового вектора
            system("cls");
            cout << "Введите границы индексов. \nНачальный: ";
            cin >> n;
            cout << "Конечный: ";
            cin >> k;
            if (n > k) {
                cout << "Ошибка. Неверные границы." << endl;
                system("pause");
                break;
            }
            cout << "Введите элементы массива: ";
            Vect vect(n, k);
            for (int i = n; i < k+1; i++)
                cin >> vect[i];
            men1 = false;
            vector = vect;
            break;
        }
        if (menu1() == 2) { // закончить работу
            system("cls");
            men1 = false;
            men2 = false;
            break;
        }
        else {
            system("cls");
            cout << "Ошибка. Повторите ввод." << endl;
            break;
        }
    }
 
    // cout << vector[3];
 
    while (men2) {
        system("cls");
        if (menu2() == 1) {
            system("cls");
            cout << "Вектор удален." << endl;
            men2 = false;
            system("pause");
            break;
        }
        if (menu2() == 2) {
            system("cls");
            Vect vect2(n, k), vect3(n, k);
            cout << "Введите элементы второго вектора: ";
            for (int i = n; i < k+1; i++)
                cin >> vect2[i];
            vect3 = vector + vect2;
            vector3 = vect3;
            break;
        }
        if (menu2() == 7) { // закончить работу
            system("cls");
            men2 = false;
            break;
        }
        else {
            system("cls");
            cout << "Ошибка. Повторите ввод." << endl;
            break;
        }
    }
 
 
 
    //vector.~Vect();
    system("pause");
    return 0;
}
 
int menu2() {
    char buf[10]; int variant;
    do {
        cout << "\n\nВыберите действие:" << endl;
        cout << "- удалить вектор (1)";
        cout << "\n- прибавить вектор (2)\n- вычесть вектор (3)" << endl;
        cout << "- умножить на скаляр (4)\n- разделить на скаляр (5)\n- закончить работу (7)" << endl;
        cin >> buf; variant = atoi(buf);
    }
    while (!variant);
    cin.get();
    return variant;
}
 
int menu1() {
    char buf[10]; int variant;
    do {
        cout << "\n\nВыберите действие:" << endl;
        cout << "- создать вектор (1)";
        cout << "\n- закончить работу (2)" << endl;
        cin >> buf; variant = atoi(buf);
    }
    while (!variant);
    cin.get();
    return variant;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru