2013-12-23 265 views
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不,他们不。那个参考文献指的是什么?他们通常会以价值回报。 – juanchopanza

+0

你如何处理两个向量的大小不同?另外,你是否遵循[三规则](http://en.wikipedia.org/wiki/Rule_of_three_%28C++_programming%29)? – juanchopanza

回答

0

因为你的阵列(矢量)是在内存DINAMIC区。当你在函数中返回本地对象时,你必须有复制构造函数,并重载operator =。 但在较新版本的编译器中,他们有优化,我认为从标准C++ 11。优化是,如果编译器在运行程序之前知道他应该返回什么,他不会调用复制构造函数。