运算符重载 add 使用 operator+ 用于 class-template
Operators overloading add using operator+ for a class-template
我需要一个函数来使用 operator+
将值添加到 v[i]
向量 v
包含值 10,2
和 3
.
#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+=
这意味着 return 对 Measurement<T>
的引用
Measurement<T>& operator+=(const T& nr)
{
this->val += nr;
return *this;
}
并称其为
v[2] += 3 + 2;
我需要一个函数来使用 operator+
将值添加到 v[i]
向量 v
包含值 10,2
和 3
.
#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+=
这意味着 return 对 Measurement<T>
Measurement<T>& operator+=(const T& nr)
{
this->val += nr;
return *this;
}
并称其为
v[2] += 3 + 2;