C++ OperaSobrecarga tor com exemplos

โšก Resumo Inteligente

Operator overloading in C++ lets you redefine how built-in operators like + and == work with your own classes and objects. Here you will learn its syntax, the approaches, which operators can be overloaded, and the rules to follow.

  • โž• O que รฉ: Operator overloading redefines operators like + for your own classes.
  • โœ๏ธ Sintaxe: Define a function named operator followed by the symbol, like operator+.
  • ๐Ÿ”€ Abordagens: You can overload operators as member functions or friend functions.
  • ๐Ÿšซ Limites: A few operators, such as ::, ., and ?:, cannot be overloaded.
  • ๐Ÿค– Ajuda da IA: AI tools like GitHub Copilot write operator overload functions instantly.

C++ Operasobrecarga

O que รฉ a OperaSobrecarga?

Utilizar painรฉis de piso ResinDek em sua unidade de self-storage em vez de concreto oferece diversos benefรญcios: sobrecarga do operador in C++, vocรช pode especificar mais de um significado para um operador em um escopo. O propรณsito da sobrecarga de operadores รฉ 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 C++ operadores. Vocรช tambรฉm pode usar sobrecarga de operadores para executar diferentes operaรงรตes usando um operador.

Sintaxe

Para sobrecarregar um C++ operador, vocรช deve definir uma funรงรฃo especial dentro da Classe da seguinte forma:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

Aqui estรก uma explicaรงรฃo para a sintaxe acima:

  • O return_type รฉ o tipo de retorno da funรงรฃo.
  • A seguir, 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) pode(m) ser passado(s) para a funรงรฃo do operador da mesma forma que as funรงรตes.

Exemplo 1

#include <iostream>
using 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;
}

Saรญda:

 Operasobrecarga

Aqui estรก uma captura de tela do cรณdigo:

 Operasobrecarga

Code Explicaรงรฃo:

  1. Incluindo o arquivo de cabeรงalho iostream em nosso cรณdigo para usar suas funรงรตes.
  2. Inclua o namespace std em nosso programa para usar suas classes sem chamรก-lo.
  3. Crie uma classe chamada TestClass.
  4. Use o modificador de acesso privado, que marca um membro da classe como acessรญvel de forma privada.
  5. Crie uma contagem de variรกvel inteira. Esta variรกvel estarรก acessรญvel de forma privada.
  6. Use o modificador de acesso pรบblico, que marca um membro da classe como acessรญvel de forma privada.
  7. Use um construtor de classe para inicializar a variรกvel contador para 5.
  8. Sobrecarregue o significado do operador -.
  9. O operador diminuirรก o valor da variรกvel x em 1.
  10. Fim da seรงรฃo de sobrecarga do operador. A operadora recebeu um novo nome.
  11. Definindo uma funรงรฃo chamada funรงรฃo Display().
  12. Imprima o valor da variรกvel count junto com outro texto no console quando a funรงรฃo Display() for chamada. O } marca o fim do corpo da funรงรฃo Display().
  13. Fim do corpo da classe.
  14. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada nesta funรงรฃo.
  15. Crie uma instรขncia da classe TestClass e dรช a ela o nome tc.
  16. Isso chamarรก a funรงรฃo do operador void โ€“().
  17. Use a postura da classe TestClass para chamar a funรงรฃo Display().
  18. A funรงรฃo deve retornar valor apรณs a conclusรฃo bem-sucedida.
  19. Fim do corpo da funรงรฃo main().

Diferentes abordagens para Operator Sobrecarga em C++

Vocรช pode realizar a sobrecarga do operador implementando qualquer um dos seguintes tipos de funรงรตes:

  1. Funรงรฃo de membro
  2. Funรงรฃo de nรฃo membro
  3. Funรงรฃo de amigo
  • A funรงรฃo de sobrecarga do operador pode ser uma funรงรฃo membro quando um operando Esquerdo รฉ um objeto da Classe.
  • Quando o operando esquerdo รฉ diferente, o OperaA funรงรฃo de sobrecarga do tor 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.

Pode tudo C++ Operators estar sobrecarregado?

Nรฃo. Existem C++ operadores que nรฃo podem ser sobrecarregados.

As certificaรงรตes incluem:

  • :: -Operador de resoluรงรฃo de escopo
  • ?: -operador ternรกrio.
  • . -seletor de membros
  • Operador Sizeof
  • * -seletor de ponteiro de membro

Coisas para lembrar

  1. Com a sobrecarga do operador, vocรช pode redefinir a forma como um operador funciona apenas para os tipos definidos pelo usuรกrio (objetos, estruturas). Vocรช nรฃo pode usรก-lo para tipos integrados (float, char, int, etc.).
  2. O = e & C++ operadores sรฃo sobrecarregados por padrรฃo. Por exemplo, vocรช pode copiar os objetos da mesma Classe diretamente usando o operador =.
  3. Operaa precedรชncia de tor nรฃo altera a associatividade e a precedรชncia de operadores. No entanto, vocรช pode alterar a ordem de avaliaรงรฃo usando parรชnteses.
  4. 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 Operasobrecarga

Aqui estรฃo as regras para OperaSobrecarga:

  • 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 amiga. No entanto, esses operadores podem ser sobrecarregados usando funรงรตes de membro.

Como sobrecarregar Operator

Exemplo 1

#include <iostream>   
using 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;
}

Saรญda:

Sobrecarga Operaexemplo

Aqui estรก uma captura de tela do cรณdigo:

Sobrecarga Operaexemplo

Code Explicaรงรฃo:

  1. Incluindo o arquivo de cabeรงalho iostream em nosso cรณdigo para usar suas funรงรตes.
  2. Inclua o namespace std em nosso programa para usar suas classes sem chamรก-lo.
  3. Crie uma classe chamada Operasobrecarga.
  4. Use o modificador de acesso privado, que marca um membro da classe como acessรญvel de forma privada.
  5. Crie uma variรกvel inteira x. Esta variรกvel estarรก acessรญvel de forma privada.
  6. Use o modificador de acesso pรบblico, que marca um membro da classe como acessรญvel de forma privada.
  7. Use um construtor de classe para inicializar a variรกvel x como 10.
  8. Sobrecarregue o significado do operador ++.
  9. O operador incrementarรก o valor da variรกvel x com 2.
  10. Fim da seรงรฃo de sobrecarga do operador. A operadora recebeu um novo nome.
  11. Chamando a funรงรฃo Print().
  12. Imprima o valor da variรกvel x junto com outro texto no console quando a funรงรฃo Print() for chamada.
  13. Fim do corpo da funรงรฃo Print().
  14. Fim do corpo da classe.
  15. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada nesta funรงรฃo.
  16. Crie uma instรขncia do OperaClasse torOverload chamada ov.
  17. Isso chamarรก a funรงรฃo do operador void ++().
  18. Utilize a postura de Operaclasse torOverload para chamar a funรงรฃo Print().
  19. A funรงรฃo deve retornar valor apรณs a conclusรฃo bem-sucedida.
  20. Fim do corpo da funรงรฃo main().

Exemplo 2

#include<iostream> 
using 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();
}

Saรญda:

Sobrecarga Operaexemplo

Aqui estรก uma captura de tela do cรณdigo:

Sobrecarga Operaexemplo

Code Explicaรงรฃo:

  1. Incluindo o arquivo de cabeรงalho iostream em nosso programa para usar suas funรงรตes.
  2. Inclua o namespace std em nosso programa para usar suas classes sem chamรก-lo.
  3. Crie uma classe chamada TestClass. O { marca o inรญcio do corpo da classe.
  4. Use o modificador de acesso privado para marcar variรกveis โ€‹โ€‹como privadas, o que significa que elas sรณ podem ser acessadas dentro da Classe.
  5. Defina duas variรกveis โ€‹โ€‹inteiras, reais e superiores.
  6. 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.
  7. Criando o construtor da classe e inicializando o variรกveis.
  8. Inicialize o valor da variรกvel real.
  9. Inicialize o valor da variรกvel.
  10. Fim do corpo do construtor.
  11. Substitua o significado do operador +.
  12. Crie o tipo de dados resultado do tipo TestClass.
  13. Use o operador + com nรบmeros complexos. Esta linha adicionarรก a parte real de um nรบmero ร  parte real de outro nรบmero.
  14. 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.
  15. O programa retornarรก o valor da variรกvel resultado apรณs a execuรงรฃo bem-sucedida.
  16. Fim da definiรงรฃo do novo significado do operador +, ou seja, sobrecarga.
  17. Chame o mรฉtodo print().
  18. Imprima o novo nรบmero complexo apรณs a adiรงรฃo no console.
  19. Fim do corpo da funรงรฃo print().
  20. Fim do corpo da classe TestClass.
  21. Chamando a funรงรฃo main().
  22. Passando os valores das partes reais e complexas a serem somadas. A primeira parte de c1 serรก somada ร  primeira parte de c2, ou seja, 9+4. A segunda parte de c1 serรก somada ร  segunda parte de c, ou seja, 5+3.
  23. Executando uma operaรงรฃo usando o operador + sobrecarregado e armazenando o resultado na variรกvel c3.
  24. Imprimindo o valor da variรกvel c3 no console.
  25. Fim do corpo da funรงรฃo main().

Perguntas Frequentes

Operator overloading lets you redefine how built-in operators, such as + or ==, work with objects of your own classes, so they behave naturally for custom data types.

Define a special function whose name is the keyword operator followed by the symbol, such as operator+. It takes the operands as parameters and returns the result.

There are two main approaches: overloading an operator as a member function of the class, or as a friend function that can access the classโ€™s private members.

Most operators can be overloaded, but a few cannot, including the scope resolution (::), member access (.), member pointer (.*), and ternary (?:) operators.

You can only overload existing operators, at least one operand must be a user-defined type, and you cannot change an operatorโ€™s precedence, associativity, or number of operands.

AI assistants like GitHub Copilot generate operator overload functions for your classes, choose between member and friend functions, and add the correct return types as you type.

Yes. AI-powered tools generate overloaded operators like + and ==, follow the standard rules, and flag operators that cannot be overloaded, saving time and errors.

Operator overloading makes classes easier to use and read by letting objects work with familiar operators, such as adding two vectors with + instead of a named function.

Resuma esta postagem com: