C++ 重载运算符不修改原始对象(通过引用传递)
C++ Overloaded operator doesn't modify original object (passed by reference)
我正在创建一个子类vector,我想重载它的=操作符(最初,它是+操作符),但是如果我将它的结果赋值给引用,它不会修改原始对象。
似乎我错过了关于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
}
此代码
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()
功能即可。
相关文章:
- 引用对象成员函数的成员函数
- 从 Base 引用对象调用派生类的成员
- 转换引用对象的边界框?
- 现代编译器会优化只引用对象子集的局部变量吗
- l值引用对象上的Constexpr成员函数:Clang和gcc不同意
- 将 const 类型引用对象注册为类成员对象C++
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- 无法用2D矢量成员引用对象
- 在由引用对象传递中访问由引用对象传递的变量
- 如何使用QString引用对象名称
- 使用自动迭代器引用对象
- C++ 在另一个对象中引用对象的当前状态
- 使用共享对象和引用对象进行引用计数
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 引用对象的动态类型何时可以更改
- 引用对象内部的指针
- C++从全局静态函数中引用对象
- C++如何仅在没有其他人直接或间接引用对象指针时删除该指针
- 如何使用C++引用对象
- 为什么引用对象仅保存特定类型的引用