Operator Overloading
C++ permite definir o que um operator como + significa para o seu próprio type, implementando um method chamado operator+. Isso é genuinamente distintivo comparado a qualquer outro curso deste site: Python tem dunder methods com um propósito semelhante, mas nenhuma outra linguagem aqui deixa um type adotar exatamente a mesma sintaxe de operator que os types numéricos embutidos usam.
#include <iostream>
using namespace std;
class Point {
public:
int x, y;
Point(int x, int y) : x(x), y(y) {}
Point operator+(const Point& other) const {
return Point(x + other.x, y + other.y);
}
};
int main() {
Point a(1, 2);
Point b(3, 4);
Point c = a + b;
cout << "(" << c.x << ", " << c.y << ")" << endl;
return 0;
}(4, 6)
a + b chama a.operator+(b) por trás das cenas — a sintaxe se lê exatamente como somar dois números, mesmo que Point seja um type que você definiu. A sintaxe : x(x), y(y) no constructor é uma member initializer list, a forma idiomática de definir os fields de uma class C++ diretamente a partir dos parâmetros do seu constructor.
A seguir: templates — o próprio mecanismo do C++ em tempo de compilação para escrever uma function ou class que funcione com muitos types.
Practice exercise
Defina uma class Vec2 com int x, y e um constructor. Faça overload de operator+ para que somar dois Vec2 some seus componentes. Some Vec2(2, 3) e Vec2(4, 1), depois imprima o x e o y do resultado separados por um espaço.