C++ 运算符重载

C++ 运算符重载,c++,operator-overloading,C++,Operator Overloading,我正在尝试编写自己的向量类,对某些操作使用重载,例如元素的输入/输出和push_back() 如何重载加法运算符?现在,在对两个向量的每个元素求和后,我得到了数组的各个元素,但我想做如下操作: myVector c=vec+vec2 然后cout,因为数组(向量)位于内存的动态区域。在函数中返回本地对象时,必须具有复制构造函数和重载运算符=。 但在较新版本的编译器中,我认为它们具有优化功能,这是从标准C++11开始的。优化是,如果编译器在运行程序之前知道应该返回什么,他就不会调用复制构造函数。我

我正在尝试编写自己的向量类,对某些操作使用重载,例如元素的输入/输出和
push_back()

如何重载加法运算符?现在,在对两个向量的每个元素求和后,我得到了数组的各个元素,但我想做如下操作:
myVector c=vec+vec2

然后
cout,因为数组(向量)位于内存的动态区域。在函数中返回本地对象时,必须具有复制构造函数和重载运算符=。

但在较新版本的编译器中,我认为它们具有优化功能,这是从标准C++11开始的。优化是,如果编译器在运行程序之前知道应该返回什么,他就不会调用复制构造函数。

我创建了一个新的
myVector
对象并返回它。但我得到了一个运行时错误。@特洛伊木马程序不,他们没有。这个提法指的是什么?它们通常按值返回。如何处理两个向量大小不同的情况?另外,您是否遵循了?一个明显的错误是复制构造函数中
this->array
的第二个赋值。泄漏新分配的内存并重用旧指针。如果复制的源只是一个临时的,比如算术运算的结果,这将是错误的。@juanchopanza删除了我糟糕的工作。来自的一些相关信息:“结果为新值(如+、-)的运算符必须逐值返回新值,结果为现有值但已修改(如+=、-=)的运算符应返回对修改值的引用。”
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;

}