gpt4 book ai didi

C++ 重载运算符不修改原始对象(通过引用传递)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:49 24 4
gpt4 key购买 nike

我正在创建一个子类 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() 函数。

关于C++ 重载运算符不修改原始对象(通过引用传递),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15556455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com