【发布时间】:2019-04-09 11:39:30
【问题描述】:
我是 C++ 新手,所以,请放轻松 :) 我发现了两种在 C++ 中重载二元运算符的不同方法。
第一个(摘自“C++ 中的面向对象编程”一书,Robert Lafore):
class Distance
{
private:
int value;
public:
Distance() : value(0) {}
Distance(int v) :value(v) {}
Distance operator+(Distance) const;
};
Distance Distance::operator+(Distance d2) const
{
return Distance(value+d2.value);
}
还有一个,使用朋友功能(来自互联网)
class Distance
{
private:
int value;
public:
Distance() : value(0) {}
Distance(int v) :value(v) {}
friend const Distance operator+(const Distance& left, const Distance& right);
};
const Distance operator+(const Distance& left, const Distance& right)
{
return Distance(left.value + right.value);
}
所有这些情况都可以编写如下代码:
Distance d1(11);
Distance d2(5);
Distance d3 = d1 + d2;
我的问题:这些案例的主要区别是什么?也许有一些优点或缺点。还是某种“良好的编程方式”?
提前感谢您的智慧! :)
【问题讨论】:
-
此外,对于任何运算符
op和操作数a和b,如果运算符作为成员函数重载(您的第一个替代)或operator op(a, b),如果运算符作为非成员函数重载(您的第二个替代)。
标签: c++ binary overloading operator-keyword