Sobrecarga do operador C ++

Sobrecarga do operador C ++
Este artigo fornece um guia para sobrecarga de operador em C++. A sobrecarga do operador é uma característica útil e poderosa da linguagem de programação C ++. C ++ permite a sobrecarga dos operadores mais internos. Neste tutorial, usaremos vários exemplos para demonstrar o mecanismo de sobrecarga do operador.

O que é operador?

Um operador é um símbolo que indica ao compilador para executar uma operação específica. Por exemplo, existem vários tipos de operadores em C ++, como operadores aritméticos, operadores lógicos, operadores relacionais, operadores de atribuição, operadores bitwise e muito mais.

O que é sobrecarga do operador?

A linguagem C ++ permite que os programadores forneçam significados especiais aos operadores. Isso significa que você pode redefinir o operador para obter tipos de dados definidos pelo usuário em c++. Por exemplo, "+" é usado para adicionar tipos de dados internos, como int, flutuação, etc. Para adicionar dois tipos de dados definidos pelo usuário, é necessário sobrecarregar o operador "+".

Sintaxe para sobrecarga do operador

C ++ fornece uma função especial chamada "operador" para sobrecarga do operador. A seguir, a sintaxe para sobrecarga do operador:

Sampleclass de classe

..
Público:
Símbolo do operador ReturnType (argumentos)
..

..
;

Aqui, "Operador" é uma palavra -chave e "símbolo" é o operador que queremos sobrecarregar.

Exemplos

Agora que você entende o conceito geral de sobrecarga do operador, vamos por alguns programas de exemplo de funcionamento para você entender essa ideia mais concretamente. Abordaremos os seguintes exemplos:

  1. Exemplo 1: Sobrecarga de operador unário (1)
  2. Exemplo 2: Sobrecarga de operador unário (2)
  3. Exemplo 3: sobrecarga do operador binário
  4. Exemplo 4: sobrecarga do operador relacional

Exemplo 1: Sobrecarga de operador unário (1)

Neste exemplo, demonstraremos como um operador unário pode ser sobrecarregado em c++. Definimos a classe, "Square_Box" e as funções públicas, "Operator ++ ()" e "Operator ++ (int)", para sobrecarregar o prefixo e os operadores de incremento de pós -fix. Na função "Main ()", criamos o objeto, "Mysquare_box1.”Aplicamos o prefixo e os operadores de incremento do prefixo ao objeto“ Mysquare_box1 ”para demonstrar a sobrecarga de operador unário.

#incluir
usando namespace std;
Classe square_box

privado:
comprimento de flutuação;
largura de flutuação;
altura de flutuação;
público:
Caixa quadrada()
Square_box (Float L, Float W, Float H)

comprimento = l;
largura = w;
altura = h;

// Sobrecarregamento do operador - Operador de prefixo "++"
operador void ++ ()

comprimento ++;
largura ++;
altura ++;

// Sobrecarregamento do operador - Operador postfix "++"
operador void ++ (int)

comprimento ++;
largura ++;
altura ++;

saída vazia ()

cout << "\tLength = " << length << endl;
cout << "\tWidth = " << width << endl;
cout << "\tHeight = " << height << endl;
cout << endl;

;
int main ()

Square_box mysquare_box1 (3.0, 5.0, 6.0);
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
mysquare_box1 ++;
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
++mysquare_box1;
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
retornar 0;

Exemplo 2: Sobrecarga de operador unário (2)

Este é outro exemplo em que demonstraremos como um operador unário pode ser sobrecarregado em c++. Definimos a classe, "Square_Box" e as funções públicas, "Operator - ()" e "Operator - (int)", para sobrecarregar os operadores de prefixo e decremento de pós -fix. Na função "main ()", criamos o objeto "mysquare_box1". Em seguida, aplicamos o prefixo e os operadores de decréscimo pós -fix no objeto "mysquare_box1".

#incluir
usando namespace std;
Classe square_box

privado:
comprimento de flutuação;
largura de flutuação;
altura de flutuação;
público:
Caixa quadrada()
Square_box (Float L, Float W, Float H)

comprimento = l;
largura = w;
altura = h;

// Sobrecarregamento do operador-"-" Operador de prefixo
operador vazio - ()

comprimento--;
largura--;
altura--;

// sobrecarga do operador-"-" Operador de postfix
operador void - (int)

comprimento--;
largura--;
altura--;

saída vazia ()

cout << "\tLength = " << length << endl;
cout << "\tWidth = " << width << endl;
cout << "\tHeight = " << height << endl;
cout << endl;

;
int main ()

Square_box mysquare_box1 (3.0, 5.0, 6.0);
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
mysquare_box1--;
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
--mysquare_box1;
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
retornar 0;

Exemplo 3: sobrecarga do operador binário

Agora, veremos um exemplo de sobrecarga do operador binário. A sintaxe para a sobrecarga do operador binário será um pouco diferente da sobrecarga unária do operador. Neste exemplo, sobrecarregaremos o operador "+" para adicionar dois objetos "square_box".

#incluir
usando namespace std;
Classe square_box

privado:
comprimento de flutuação;
largura de flutuação;
altura de flutuação;
público:
Caixa quadrada()
Square_box (Float L, Float W, Float H)

comprimento = l;
largura = w;
altura = h;

// OPERADOR DE OPERADOR - Operador "+"
Operador Square_Box + (Const Square_Box & OBJ)

Temp square_box;
Temp.comprimento = comprimento + obj.comprimento;
Temp.largura = largura + obj.largura;
Temp.altura = altura + obj.altura;
retornar temp;

saída vazia ()

cout << "\tLength = " << length << endl;
cout << "\tWidth = " << width << endl;
cout << "\tHeight = " << height << endl;
cout << endl;

;
int main ()

Square_box mysquare_box1 (3.0, 5.0, 6.0), mysquare_box2 (2.0, 3.0, 5.0), resultado;
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
cout << "Dimensions of mySquare_Box2 = " << endl;
mysquare_box2.saída();
resultado = mysquare_box1 + mysquare_box2;
cout << "Dimensions of resultant square box = " << endl;
resultado.saída();
retornar 0;

Exemplo 4: sobrecarga do operador relacional

Agora, veremos um exemplo de sobrecarga do operador relacional. A sintaxe para sobrecarga do operador relacional é como a da sobrecarga do operador binário. Neste exemplo, sobrecarregaremos os operadores "" para aplicar aos objetos "square_box".

#incluir
usando namespace std;
Classe square_box

privado:
comprimento de flutuação;
largura de flutuação;
altura de flutuação;
público:
Caixa quadrada()
Square_box (Float L, Float W, Float H)

comprimento = l;
largura = w;
altura = h;

// sobrecarga do operador - "<" operator
operador bool < (const Square_Box& obj)

if (comprimento < obj.length)
retornar true;
outro
retorna falso;

// operador de sobrecarga do operador - ">" Operador
Operador Bool> (Const Square_Box & OBJ)

se (comprimento> obj.comprimento)
retornar true;
outro
retorna falso;

saída vazia ()

cout << "\tLength = " << length << endl;
cout << "\tWidth = " << width << endl;
cout << "\tHeight = " << height << endl;
cout << endl;

;
int main ()

Square_box mysquare_box1 (2.0, 3.0, 5.0), mysquare_box2 (4.0, 6.0, 8.0);
resultado bool;
cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.saída();
cout << "Dimensions of mySquare_Box2 = " << endl;
mysquare_box2.saída();
resultado = mysquare_box1 < mySquare_Box2;
cout << "mySquare_Box1 < mySquare_Box2 = " << result < mySquare_Box2;
cout < mySquare_Box2 = " << result << endl;
retornar 0;

Conclusão

C ++ é uma linguagem de programação de uso geral e flexível que é amplamente utilizada em uma variedade de domínios. Esta linguagem de programação suporta o polimorfismo de tempo de compilação e tempo de execução. Este artigo mostrou como executar a sobrecarga do operador em C++. Esse é um recurso muito útil do C ++ que adiciona algum esforço extra para o desenvolvedor definir o operador para sobrecarga, mas definitivamente facilita a vida para o usuário da classe.