Avatar ·

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