Я пытаюсь написать свой собственный векторный класс, используя перегрузку для определенных операций, таких как ввод/вывод элементов и push_back()
.
Как я могу перегрузить оператор добавления? Прямо сейчас у меня есть cout
отдельные элементы массива после суммирования каждого элемента из двух векторов, но я хотел бы сделать что-то вроде: myVector c = vec + vec2
Тогда cout << c << endl
Должен ли я написать свой собственный конструктор копирования?
myVector::myVector( myVector& v)
{
cout << "Copy constructor called." << endl;
this->array = new int[v.maxsize];
this->array = v.array;
cout << "Returning from Copy constructor." << endl;
}
Это мой перегруженный оператор добавления:
myVector myVector::operator+(myVector& a)
{
cout << "Addition operator overloaded" << endl;
myVector result;
result.array = new int[a.maxsize];
for (int i = 0; i < a.size(); i++)
result.array[i] = this->array[i] + a.array[i];
result.setSize(a.size());
return result;
}
Вот полный исходный код: http://pastebin.com/raw.php?i=9nkWVLwy
Поскольку ваш массив (вектор) находится в динамической зоне памяти. Когда вы возвращаете локальный объект в функцию, вы должны иметь конструктор копирования и перегруженный operator =. Но в более новых версиях компилятора у них есть оптимизация, я думаю, со стандартного С++ 11. Оптимизация заключается в том, что если компилятор знает, что он должен вернуть перед запуском программы, он не будет называть конструктор копирования.
myVector
и вернул его. Но я получаю ошибку во время выполнения.