Como usar sobrecarga do operator em C++

🏗️ Você pode definir ou redefinir a maneira como os operadores funcionam para tipos de dados definidos pelo usuário.


Como usar sobrecarga do operator em C++


Em C++, um “operator“(operador) é uma função especial que é usada para realizar operações em objetos.

Os operadores podem ser sobrecarregados, o que significa que você pode definir ou redefinir a maneira como os operadores funcionam para tipos de dados definidos pelo usuário.

Vamos ver alguns exemplos comuns de operadores e como eles podem ser sobrecarregados em C++!


Operadores Aritméticos

Os operadores aritméticos realizam operações matemáticas básicas.

Exemplo de Sobrecarga do Operador de Adição (+)

#include <iostream>

class Complex {
  public:
    float real, imag;

    Complex(float r = 0, float i = 0) : real(r), imag(i) {}

    // Sobrecarga do operador +
    Complex operator + (const Complex& obj) {
      return Complex(real + obj.real, imag + obj.imag);
    }
};

int main() {
  Complex c1(3.0, 4.0), c2(1.0, 2.0);
  Complex c3 = c1 + c2;
  std::cout << "Resultado: " << c3.real << " + " << c3.imag << "i" << std::endl;
  return 0;
}

Operadores Relacionais

Os operadores relacionais comparam dois valores.

Exemplo de Sobrecarga do Operador de Igualdade (==)

#include <iostream>

class Complex {
  public:
    float real, imag;

    Complex(float r = 0, float i = 0) : real(r), imag(i) {}

    // Sobrecarga do operador ==
    bool operator == (const Complex& obj) {
      return (real == obj.real && imag == obj.imag);
    }
};

int main() {
  Complex c1(3.0, 4.0), c2(3.0, 4.0);
  if (c1 == c2) {
    std::cout << "Os números complexos são iguais." << std::endl;
  } else {
    std::cout << "Os números complexos são diferentes." << std::endl;
  }
  return 0;
}

Operadores de Atribuição

Os operadores de atribuição atribuem um valor a uma variável.

Exemplo de Sobrecarga do Operador de Atribuição (=)

#include <iostream>

class Complex {
  public:
    float real, imag;

    Complex(float r = 0, float i = 0) : real(r), imag(i) {}

    // Sobrecarga do operador =
    Complex& operator = (const Complex& obj) {
      if (this != &obj) {
        real = obj.real;
        imag = obj.imag;
      }
      return *this;
    }
};

int main() {
  Complex c1(3.0, 4.0), c2;
  c2 = c1;
  std::cout << "c2: " << c2.real << " + " << c2.imag << "i" << std::endl;
  return 0;
}


Operadores de Inserção e Extração

Os operadores de inserção (<<) e extração (>>) são usados para entrada e saída de dados.

Exemplo de Sobrecarga do Operador de Inserção (<<)

#include <iostream>

class Complex {
  public:
    float real, imag;

    Complex(float r = 0, float i = 0) : real(r), imag(i) {}

    // Sobrecarga do operador <<
    friend std::ostream& operator << (std::ostream& out, const Complex& obj) {
      out << obj.real << " + " << obj.imag << "i";
      return out;
    }
};

int main() {
  Complex c1(3.0, 4.0);
  std::cout << "Número complexo: " << c1 << std::endl;
  return 0;
}

Operadores Unários

Os operadores unários operam em um único operando.

Exemplo de Sobrecarga do Operador de Negação (-)

#include <iostream>

class Complex {
  public:
    float real, imag;

    Complex(float r = 0, float i = 0) : real(r), imag(i) {}

    // Sobrecarga do operador unário -
    Complex operator - () const {
      return Complex(-real, -imag);
    }
};

int main() {
  Complex c1(3.0, 4.0);
  Complex c2 = -c1;
  std::cout << "c2: " << c2.real << " + " << c2.imag << "i" << std::endl;
  return 0;
}

Esses são apenas alguns exemplos de operadores em C++ e como eles podem ser sobrecarregados. A sobrecarga de operadores permite que você defina o comportamento dos operadores para tipos de dados personalizados, tornando o código mais intuitivo e legível.

Nós já fizemos um vídeo mostrando como funcionam as sobrecargas de operadores que possuem também outras dicas como: const type&, estruturas de união,… Para assistir veja o vídeo abaixo:

O código está disponível na postagem aqui no blog: Como Criar sua própria Classe de Vectores em C++.


Links úteis


cpp cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!