Incremento ++ e Decremento - Sobrecarga de Operador na Programação C ++

Neste exemplo, você aprenderá a sobrecarregar os operadores de incremento ++ e decremento - em C ++.

Para entender este exemplo, você deve ter conhecimento dos seguintes tópicos de programação C ++:

  • Classes e objetos C ++
  • Construtores C ++
  • Sobrecarga de operador C ++

Neste tutorial, os operadores de incremento ++ e decrementos - são sobrecarregados da melhor maneira possível, ou seja, aumenta o valor de um membro de dados em 1 se ++ o operador opera em um objeto e diminui o valor do membro de dados em 1 se - operador é usado.

Exemplo 1: Sobrecarga do operador do prefixo ++ incremento sem tipo de retorno

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )

Resultado

 i = 0 i = 1

Inicialmente, quando o objeto obj é declarado, o valor do membro de dados i para o objeto obj é 0 (o construtor inicializa i com 0).

Quando o operador ++ é operado em obj, a função do operador void operator++( )é chamada, o que aumenta o valor do membro de dados i para 1.

Este programa não está completo no sentido de que você não pode usar o código:

 obj1 = ++ obj;

É porque o tipo de retorno da função do operador no programa acima é nulo.

Aqui está uma pequena modificação do programa acima para que você possa usar o código obj1 = ++obj.

Exemplo 2: Incremento de Prefixo ++ sobrecarregando operador com tipo de retorno

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )

Resultado

 i = 0 i = 0 i = 1 i = 1

Este programa é semelhante ao anterior.

A única diferença é que, o tipo de retorno da função de operador é Verificar neste caso, o que permite usar os dois códigos ++obj; obj1 = ++obj;. É porque, temp retornado da função do operador é armazenado no objeto obj.

Como o tipo de retorno da função do operador é Verificar, você também pode atribuir o valor de obj a outro objeto.

Observe que, = (operador de atribuição) não precisa ser sobrecarregado porque esse operador já está sobrecarregado na biblioteca C ++.

Exemplo 3: Incremento Postfix ++ Sobrecarga do Operador

A sobrecarga do operador de incremento até este ponto só é verdadeira se for usado na forma de prefixo.

Esta é a modificação do programa acima para fazer este trabalho tanto na forma de prefixo quanto na forma de pós-fixada.

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 0 i = 0 i = 1 i = 1 i = 2 i = 1

When increment operator is overloaded in prefix form; Check operator ++ () is called but, when increment operator is overloaded in postfix form; Check operator ++ (int) is invoked.

Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.

Don't confuse this int doesn't indicate integer.

Example 4: Operator Overloading of Decrement -- Operator

Decrement operator can be overloaded in similar way as increment operator.

 #include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 3 i = 3 i = 2 i = 2 i = 1 i = 2

Also, unary operators like: !, ~ etc can be overloaded in similar manner.

Artigos interessantes...