Regras básicas e expressões idiomáticas de sobrecarga de operadores em C++
Olá a todos! Estudo C++ há cerca de seis meses e fiquei confuso com a sobrecarga de operadores. Até entendo a sintaxe, mas constantemente encontro problemas.
Por exemplo, tentei escrever uma classe simples Vector2D para vetores bidimensionais com sobrecarga do operador +. Aqui está meu código:
```cpp
class Vector2D {
public:
Vector2D(double x, double y) : x_(x), y_(y) {}
Vector2D operator+(const Vector2D& other) {
return Vector2D(x_ + other.x_, y_ + other.y_);
}
// Problema: por que não posso escrever 2.0 + v?
// Ou v1 + v2 + v3?
private:
double x_, y_;
};
```
Quando tento usar `Vector2D v3 = 2.0 + v1;`, o compilador reclama. Também não tenho certeza de como sobrecarregar corretamente os operadores `<<` para saída no cout, e quando preciso retornar uma referência e quando um valor.
É possível obter um resumo das regras básicas e expressões idiomáticas para sobrecarga de operadores? Quais operadores podem ser sobrecarregados e quais não? Quando funções friend são necessárias? E como fazer