Я новичок в C ++, так что, пожалуйста, будьте осторожны со мной :) Я нашел два разных способа перегрузить бинарный оператор в C ++.
Первый (из книги «Объектно-ориентированное программирование на C ++», Роберт Лафоре):
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;
Мой вопрос: в чем основное отличие этих случаев?Может быть, какие-то преимущества или недостатки.Или какие-то "хорошие манеры программирования"?
Заранее благодарим за мудрость!:)