C++ OperaSobrecarga tor com exemplos
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:
Aqui estรก uma captura de tela do cรณdigo:
Code Explicaรงรฃo:
- 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 a variรกvel contador 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. A operadora recebeu um novo nome.
- Definindo uma funรงรฃo chamada funรงรฃo Display().
- 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().
- Fim do corpo da classe.
- Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada nesta funรงรฃo.
- Crie uma instรขncia da classe TestClass e dรช a ela o nome tc.
- Isso chamarรก a funรงรฃo do operador void โ().
- Use a postura da classe TestClass para chamar a funรงรฃo Display().
- A funรงรฃo deve retornar valor apรณs a conclusรฃo bem-sucedida.
- 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:
- Funรงรฃo de membro
- Funรงรฃo de nรฃo membro
- 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
- 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.).
- O = e & C++ operadores sรฃo sobrecarregados por padrรฃo. Por exemplo, vocรช pode copiar os objetos da mesma Classe diretamente usando o operador =.
- 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.
- 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:
Aqui estรก uma captura de tela do cรณdigo:
Code Explicaรงรฃo:
- 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 Operasobrecarga.
- 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 como 10.
- Sobrecarregue o significado do operador ++.
- O operador incrementarรก o valor da variรกvel x com 2.
- Fim da seรงรฃo de sobrecarga do operador. A operadora 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 nesta funรงรฃo.
- Crie uma instรขncia do OperaClasse torOverload chamada ov.
- Isso chamarรก a funรงรฃo do operador void ++().
- Utilize a postura de Operaclasse torOverload para chamar a funรงรฃo Print().
- A funรงรฃo deve retornar valor apรณs a conclusรฃo bem-sucedida.
- 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:
Aqui estรก uma captura de tela do cรณdigo:
Code Explicaรงรฃo:
- 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 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 o 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 tipo de dados resultado 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 da variรกvel resultado 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 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.
- Executando uma operaรงรฃo usando o operador + sobrecarregado e armazenando 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 C++ operador em um escopo.
- Isso รฉ chamado de sobrecarga do operador.
- OperaA sobrecarga do operador fornece um significado especial de um operador para um tipo de dados definido pelo usuรกrio.
- Vocรช pode redefinir a maioria C++ operadores por sobrecarga de operadores.
- Nem todos C++ os operadores podem ficar sobrecarregados.
- Para que um operador fique sobrecarregado, pelo menos um dos operandos deve ser um objeto definido pelo usuรกrio.
- Somente os operadores existentes podem ser sobrecarregados. Vocรช nรฃo pode sobrecarregar novos operadores.



