我創建了一個子類向量,我想重載它的=運算符(最初,它是+運算符),但如果我將結果它以參考,它不會修改原始對象。
看來我錯過了一些關於C++引用的內容,但我不知道它是什麼。 如果有人能夠指出我的錯誤,我會非常感激。C++重載運算符不會修改原始對象(通過引用傳遞)
下面是代碼
#include <iostream>
#include <vector>
using namespace std;
class myvector : public vector<long double> {
public:
int n_elements;
myvector(int elems){
n_elements = elems;
reserve(n_elements);
}
myvector(int elems,long double initWith){
n_elements = elems;
reserve(n_elements);
for (int i=0; i<n_elements; i++)
(*this)[i]=initWith;
}
myvector& operator= (const vector<long double>& v){
for(int i = 0; i < n_elements; i++)
(*this)[i]=v[i];
return *this;
}
};
#define SIZE 200
void fill(myvector& m){
myvector temp = myvector(SIZE,1.0);
cout <<"0 "<< temp[0] << endl; // (0) returns 1
m = temp;
cout <<"1 "<< m[0] << endl; // (1) returns 12
}
int main(){
myvector m = myvector(SIZE,12.0);
fill(m);
cout <<"2 "<< m[0] << endl; // (2) returns 12
myvector n = myvector(SIZE,1.0);
cout <<"3 "<< n[0] << endl; // (3) returns 1
}
STL容器[不應該被分類](http://stackoverflow.com/questions/1647298/why-dont-stl-containers-have-virtual-destructors),並且它們不提供虛擬析構函數。你不應該這樣做。 – meagar 2013-03-21 19:35:38
'reserve'不會調整矢量大小。 – juanchopanza 2013-03-21 19:37:19
'我正在創建一個子類矢量'爲什麼? – 2013-03-21 19:39:39