我正在创建一个子类向量,我想重载它的=运算符(最初是+运算符),但是如果我将它的结果赋给引用,它就不会修改原始对象。
我似乎缺少一些关于C ++引用的东西,但我不知道它是什么。
如果有人能够指出我的错误,我将非常感激。
这是代码(在Ubuntu 12上使用g ++编译)
#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
}
答案 0 :(得分:0)
此代码
myvector(int elems,long double initWith){
n_elements = elems;
reserve(n_elements);
for (int i=0; i<n_elements; i++)
(*this)[i]=initWith;
}
应该只调用基类版本:
myvector(int const elems, long double const initWith)
: vector<long double>(elems, initWith)
{}
这样可以解决这样一个事实,即您有两个长度为vector.size()
和n_elements
的度量标准,它们会不同步。完全摆脱n_elements
并使用您继承的size()
函数。