Страницы

Поиск по вопросам

вторник, 11 июня 2019 г.

Конструктор копии для классов

Пытаюсь присвоить значения вектора v1 k v2 но компилятор дает ошибку. Где ошибка? И ещё один вопрос, как перезагружать оператор присваивания ???
Process returned -1073741819 (0xC0000005) execution time : 1.253 s Press any key to continue.
Вот код
#include using namespace std; class vector_c { private: int* vector1; int Max; int index; public: vector_c(int sizze) { index=0; Max=sizze; vector1 = new int[Max]; };
vector_c(vector_c &c)//copy construck {
index=c.index; Max = c.Max; vector1 = new int[Max]; for (int i = 1; i <=Max; i++) { vector1[i] = c.vector1[i];
} }; ~vector_c() { delete [] vector1; }; void max_znachenie() { int index1=0; index1 = vector1[1]; for(int i=1; i<=Max;i++) { if(vector1[i] > index1 ) index1 = vector1[i]; } cout << index1 << endl; };
void get_inf(int element) { vector1[++index]=element; };
int out_inf() { return vector1[index--]; };
};

int main() { vector_c v1(3); v1.get_inf(78); v1.get_inf(2); v1.get_inf(5); v1.max_znachenie(); cout << endl; cout << endl << v1.out_inf() << endl << v1.out_inf() << endl << v1.out_inf() << endl; vector_c v2=v1; cout << v2.out_inf(); return 0; }


Ответ

Прогнала ваш код в дебаггере. Есть 2 проблемы. В конструкторе копирования копируются не все поля. Надо добавить.
index=c.index;
Функция переписана.
void get_inf(int element) { vector1[index++]=element; };
Пример перегрузки оператора присваивания
class vector_c { private: int* vector1; int Max; int index; public: vector_c(int sizze) { index=0; Max=sizze; vector1 = new int[Max]; };
vector_c& operator=(const vector_c& right) { //проверка на самоприсваивание if (this == &right) { return *this; } // Здесь скопируйте все значения return *this; } };

Комментариев нет:

Отправить комментарий