gpt4 book ai didi

c++ - 运算符重载使用operator +作为类模板

转载 作者:行者123 更新时间:2023-12-02 09:53:13 25 4
gpt4 key购买 nike

我需要一个函数使用v[i]operator+添加值
vector v包含值10,23

#include <iostream>
#include <vector>

template<typename T>
class Measurement
{
private:
T val;
public:
Measurement(T a)
: val{ a }
{}

T value() const { return val; }

Measurement<T>& operator+(const T& nr)
{
//... ???
return *this;
}

};

int main()
{
//create a vector with values (10,2,3)
std::vector<Measurement<int>> v{ 10,2,3 };
v[2] + 3 + 2; //add at v[2] value 5
for (const auto& m : v) std::cout << m.value() << ",";
return 0;
}
结果必须为 10,2,8

最佳答案

只需将实例的val添加到其他nr

Measurement<T>& operator+(const T& nr)
{
this->val += nr;
return *this;
}

但是,为此过载 operator+可能会产生误导,应避免这种情况。因此,我建议采用传统方式
Measurement<T> operator+(const T& nr)
{
Measurement<T> tmp{ *this };
tmp.val += nr;
return tmp; // returns the temporary, which you need to reassign!
}
并做
v[2] = v[2] + 3 + 2; 
获得所需的结果。

甚至更好地提供 operator+=,这意味着确实会返回对 Measurement<T>的引用
Measurement<T>& operator+=(const T& nr)
{
this->val += nr;
return *this;
}
并称它为
v[2] += 3 + 2;

关于c++ - 运算符重载使用operator +作为类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62608100/

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