AnyCompiler

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;
}
Output
(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.