O que é sobrecarga do operador?
Usando a sobrecarga de operador em C ++, você pode especificar mais de um significado para um operador em um escopo. O objetivo da sobrecarga de operador é fornecer um significado especial de um operador para um tipo de dados definido pelo usuário.
Com a ajuda da sobrecarga do operador, você pode redefinir a maioria dos operadores C ++. Você também pode usar a sobrecarga do operador para realizar diferentes operações usando um operador.
Neste tutorial C ++, você aprenderá:
- O que é sobrecarga do operador?
- Sintaxe
- Diferentes abordagens para sobrecarga de operador em C ++
- Todos os operadores C ++ podem ser sobrecarregados?
- Coisas para lembrar:
- Regras para sobrecarga do operador:
- Como sobrecarregar o operador:
Sintaxe
Para sobrecarregar um operador C ++, você deve definir uma função especial dentro da classe da seguinte maneira:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Aqui está uma explicação para a sintaxe acima:
- O return_type é o tipo de retorno da função.
- Em seguida, você menciona a palavra-chave do operador.
- O símbolo indica que o símbolo do operador está sobrecarregado. Por exemplo, +, -, <, ++.
- O (s) argumento (s) podem ser passados para a função do operador da mesma maneira que as funções.
Exemplo 1:
#includeusing namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}
Resultado:
Aqui está uma captura de tela do código:
Explicação do código:
- Incluindo o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o namespace std em nosso programa para usar suas classes sem chamá-lo.
- Crie uma classe chamada TestClass.
- Use o modificador de acesso privado, que marca um membro da classe como acessível de forma privada.
- Crie uma contagem de variável inteira. Esta variável estará acessível de forma privada.
- Use o modificador de acesso público, que marca um membro da classe como acessível de forma privada.
- Use um construtor de classe para inicializar o contador da variável para 5.
- Sobrecarregue o significado do operador -.
- O operador diminuirá o valor da variável x em 1.
- Fim da seção de sobrecarga do operador. O operador recebeu um novo nome.
- Definindo uma função chamada função Display ().
- Imprima o valor da contagem variável junto com outro texto no console quando a função Display () for chamada. O} marca o final do corpo da função Display ().
- Fim do corpo da classe.
- Chame a função main (). A lógica do programa deve ser adicionada a esta função.
- Crie uma instância da classe TestClass e dê a ela o nome tc.
- Isso chamará a função void operator - ().
- Use a postura de TestClass Class para chamar a função Display ().
- A função deve retornar um valor após a conclusão bem-sucedida.
- Fim do corpo da função main ().
Diferentes abordagens para sobrecarga de operador em C ++
Você pode realizar a sobrecarga do operador implementando qualquer um dos seguintes tipos de funções:
- Função de membro
- Função de não membro
- Função de amigo
- A função de sobrecarga de operador pode ser uma função de membro quando um operando à esquerda é um objeto da classe.
- Quando o operando Esquerdo é diferente, a função de sobrecarga do Operador deve ser uma função não membro.
Você pode tornar a função de sobrecarga do operador uma função amiga se ela precisar acessar os membros da classe privada e protegida.
Todos os operadores C ++ podem ser sobrecarregados?
Não. Existem operadores C ++ que não podem ser sobrecarregados.
Eles incluem:
- :: -Operador de resolução do escopo
- ?: -operador externo.
- . - seletor de membro
- Operador de tamanho
- * - seletor de ponteiro de membro
Coisas para lembrar:
- Com a sobrecarga de operador, você pode redefinir a maneira como um operador funciona apenas para os tipos definidos pelo usuário (objetos, estruturas). Você não pode usá-lo para tipos internos (float, char, int, etc.).
- Os operadores = e & C ++ são sobrecarregados por padrão. Por exemplo, você pode copiar os objetos da mesma classe diretamente usando o operador =.
- A precedência do operador não altera a associativamente e a precedência dos operadores. No entanto, você pode alterar a ordem de avaliação usando parênteses.
- Existem quatro operadores que você não pode sobrecarregar em C ++. Eles incluem o operador de resolução de escopo (: :), o operador de seleção de membro (.), A seleção de membro por meio de um ponteiro para o operador de função (. *) E o operador ternário (? :).
Regras para sobrecarga do operador:
Aqui estão as regras para sobrecarga do operador:
- Para que funcione, pelo menos um operando deve ser um objeto de classe definido pelo usuário.
- Você só pode sobrecarregar os operadores existentes. Você não pode sobrecarregar novos operadores.
- Alguns operadores não podem ser sobrecarregados usando uma função de amigo. No entanto, esses operadores podem ser sobrecarregados usando a função de membro.
Como sobrecarregar o operador:
Exemplo 1:
#includeusing namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}
Resultado:
Aqui está uma captura de tela do código:
Explicação do código:
- Incluindo o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o namespace std em nosso programa para usar suas classes sem chamá-lo.
- Crie uma classe chamada OperatorOverload.
- Use o modificador de acesso privado, que marca um membro da classe como acessível de forma privada.
- Crie uma variável inteira x. Esta variável estará acessível de forma privada.
- Use o modificador de acesso público, que marca um membro da classe como acessível de forma privada.
- Use um construtor de classe para inicializar a variável x para 10.
- Sobrecarregue o significado do operador ++.
- O operador irá incrementar o valor da variável x com 2.
- Fim da seção de sobrecarga do operador. O operador recebeu um novo nome.
- Chamando a função Print ().
- Imprima o valor da variável x junto com outro texto no console quando a função Print () for chamada.
- Fim do corpo da função Print ().
- Fim do corpo da classe.
- Chame a função main (). A lógica do programa deve ser adicionada a esta função.
- Crie uma instância da classe OperatorOverload chamada ov.
- Isso chamará a função void operator ++ ().
- Use a postura da classe OperatorOverload para chamar a função Print ().
- A função deve retornar um valor após a conclusão bem-sucedida.
- Fim do corpo da função main ().
Exemplo 2:
#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}
Resultado:
Aqui está uma captura de tela do código:
Explicação do código:
- Incluindo o arquivo de cabeçalho iostream em nosso programa para usar suas funções.
- Inclua o namespace std em nosso programa para usar suas classes sem chamá-lo.
- Crie uma classe chamada TestClass. O {marca o início do corpo da classe.
- Use o modificador de acesso privado para marcar variáveis como privadas, o que significa que elas só podem ser acessadas de dentro da classe.
- Defina duas variáveis inteiras, reais e superiores.
- Use o modificador de acesso público para marcar o construtor como público, o que significa que ele estará acessível mesmo fora da Classe.
- Criando o construtor da classe e inicializando as variáveis.
- Inicialize o valor da variável real.
- Inicialize o valor da variável.
- Fim do corpo do construtor.
- Substitua o significado do operador +.
- Crie o resultado do tipo de dados do tipo TestClass.
- Use o operador + com números complexos. Esta linha adicionará a parte real de um número à parte real de outro número.
- Use o operador + com números complexos. Esta linha adicionará a parte imaginária de um número à parte imaginária de outro número.
- O programa retornará o valor do resultado variável após a execução bem-sucedida.
- Fim da definição do novo significado do operador +, ou seja, sobrecarga.
- Chame o método print ().
- Imprima o novo número complexo após a adição no console.
- Fim do corpo da função print ().
- Fim do corpo da classe TestClass.
- Chamando a função main ().
- Passando os valores das partes reais e complexas a serem adicionadas. A primeira parte de c1 será adicionada à primeira parte de c2, ou seja, 9 + 4. A segunda parte de c1 será adicionada à segunda parte de c, ou seja, 5 + 3.
- Executar uma operação usando o operador sobrecarregado + e armazenar o resultado na variável c3.
- Imprimindo o valor da variável c3 no console.
- Fim do corpo da função main ().
Resumo:
- Você pode especificar mais de um significado para um operador C ++ em um escopo.
- Isso é chamado de sobrecarga do operador.
- A sobrecarga do operador fornece um significado especial de um operador para um tipo de dados definido pelo usuário.
- Você pode redefinir a maioria dos operadores C ++ por meio da sobrecarga de operadores.
- Nem todos os operadores C ++ podem ser sobrecarregados.
- Para um operador ficar sobrecarregado, pelo menos um dos operandos deve ser um objeto definido pelo usuário.
- Apenas os operadores existentes podem ser sobrecarregados. Você não pode sobrecarregar novos operadores.