Перегрузка оператора

0

Я пытаюсь написать свой собственный векторный класс, используя перегрузку для определенных операций, таких как ввод/вывод элементов и 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

  • 0
    Я создал новый объект myVector и вернул его. Но я получаю ошибку во время выполнения.
  • 2
    @trojansdestroy нет, они этого не делают. На что будет ссылаться эта ссылка? Они обычно возвращаются по значению.
Показать ещё 4 комментария
Теги:
operator-overloading

1 ответ

0
Лучший ответ

Поскольку ваш массив (вектор) находится в динамической зоне памяти. Когда вы возвращаете локальный объект в функцию, вы должны иметь конструктор копирования и перегруженный operator =. Но в более новых версиях компилятора у них есть оптимизация, я думаю, со стандартного С++ 11. Оптимизация заключается в том, что если компилятор знает, что он должен вернуть перед запуском программы, он не будет называть конструктор копирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню