Introdução à sobrecarga e substituição em C ++

Vamos começar com as definições básicas de Sobrecarga e Substituição em C ++.

Sobrecarga : O nome da função é o mesmo, mas os parâmetros e o tipo de retorno são alterados. Como conheceremos a diferença entre as funções sobrecarregadas durante o tempo de compilação, também é chamado de polimorfismo em tempo de compilação.

Substituindo: esse é um recurso da linguagem de programação orientada a objetos em que a função da classe filho tem o mesmo nome que a função de classe dos pais. Como a funcionalidade de substituição aparece na imagem depois que o objeto é declarado e as funções são acessadas usando os objetos; isto é, durante a execução do código, esse conceito de substituição também é chamado de polimorfismo em tempo de execução.

Nós temos sua sintaxe e suas formas de programação nas seções posteriores.

Sintaxe de sobrecarga e substituição

Aqui está a sintaxe da sobrecarga e substituição fornecida abaixo.

Sintaxe de sobrecarga:

return_type function_name ( int param_1, string param_2)
(
//function definition
)
return_type_2 function_name ( int param_1, string param_2)
(
//function definition
)
return_type function_name ( int param_1, int param_2)
(
//function definition
)

Todos os três juntos podem formar um exemplo do conceito de Sobrecarga.

Substituindo sintaxe:

Class A
(
Public:
void function_name ( int param_1, int param_2)
(
//function definition
)
);Class B : Class A
(
Public:
void function_name ( int param_1, int param_2)
(
//function definition
)
);

A descrição acima é a sintaxe para a funcionalidade de substituição. A saída principal pode ser inferida quando declaramos um objeto e chamamos os mesmos métodos da Classe A e da Classe B. Na funcionalidade de substituir o "Objeto" desempenha um papel importante.

Agora vamos ver um exemplo para conhecer melhor sua funcionalidade.

Exemplos de sobrecarga e substituição em C ++

Aqui estão os exemplos de Sobrecarga e substituição em C ++ com a saída fornecida abaixo:

Exemplo # 1 - Sobrecarga

Vamos começar com um programa simples.

Código:

#include
using namespace std;
int calc(int);
float calc(float);
int calc(int, float);
int main()
(
int a = 10;
float b = 11.2;
calc(a);
calc(b);
calc(a, b);
)
int calc(int a)
(
int tot=a*a;
cout << " Area of Square A is: " << tot< )
float calc(float b)
(
float tot = b*b;
cout << " Area of Square B is: " << tot < )
int calc(int a, float b)
(
int tot = a*b;
cout << " Area of Square C is: " << tot << endl;
)
#include
using namespace std;
int calc(int);
float calc(float);
int calc(int, float);
int main()
(
int a = 10;
float b = 11.2;
calc(a);
calc(b);
calc(a, b);
)
int calc(int a)
(
int tot=a*a;
cout << " Area of Square A is: " << tot< )
float calc(float b)
(
float tot = b*b;
cout << " Area of Square B is: " << tot < )
int calc(int a, float b)
(
int tot = a*b;
cout << " Area of Square C is: " << tot << endl;
)
#include
using namespace std;
int calc(int);
float calc(float);
int calc(int, float);
int main()
(
int a = 10;
float b = 11.2;
calc(a);
calc(b);
calc(a, b);
)
int calc(int a)
(
int tot=a*a;
cout << " Area of Square A is: " << tot< )
float calc(float b)
(
float tot = b*b;
cout << " Area of Square B is: " << tot < )
int calc(int a, float b)
(
int tot = a*b;
cout << " Area of Square C is: " << tot << endl;
)

Resultado:

Agora, e se eu fornecer valores de tipo de dados incorretos para as variáveis ​​a, b?

Código:

int main()
(
int a = 10.8;
float b = 12;
calc(a);
calc(b);
calc(a, b);
)

Eu mudei apenas a parte principal do programa acima, então aqui vai a saída.

resultado:

Ele nos fornece a saída, pois ele irá converter o valor flutuante em tipo de dados int e nos fornece a saída.

Agora, como exercício, você pode tentar alterar o tipo e os parâmetros de retorno da função e brincar com eles.

Exemplo # 2 - Substituindo

Abaixo, podemos ter um exemplo para uma funcionalidade de substituição em C ++.

Código:

#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)
#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)
#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)
#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)

Resultado:

Através do código acima, podemos descobrir que quando a referência do objeto de primeira classe é atribuída ao objeto criado em relação à nossa segunda classe. E então, quando acessamos o método de substituição usando o objeto da classe base, podemos notar claramente que a saída da classe derivada foi exibida. Esse conceito é chamado de substituição. A primeira e a segunda classes são as classes base e derivada, respectivamente. A saída acima é uma abaixo:

Como exercício, você pode tentar substituir e sobrecarregar uma função em conjunto e verificar se é possível ou verificar como a saída acaba sendo?

Como funciona?

Sobrecarga: Aqui, não há um ponto especial que possamos anotar. Precisamos garantir que o tipo de retorno ou os parâmetros dentro da função variem. Se olharmos acima para a estrutura de programação, as funções são declaradas primeiro e sua implementação é dada.

Substituição: A sintaxe da herança e a implementação de funções são os pontos principais a serem observados aqui. No exemplo acima, podemos notar que a declaração de função com a palavra-chave pública é bem diferente.

E em C ++, a definição de classe é finalizada por ponto e vírgula (;) e se precisarmos herdar a classe base para a classe filho, usaremos o símbolo de dois pontos (:). A principal funcionalidade da substituição é observada quando os objetos são declarados e inicializados para a classe. Após a chamada de funções usando os objetos, podemos entender claramente o conceito de substituição.

Vantagens

  • A única vantagem principal dessa substituição e sobrecarga é a economia de tempo.
  • Economize espaço na memória.
  • A legibilidade do código é aumentada.
  • Aqui, para o conceito de sobrecarga de funções, podemos usar diferentes nomes de funções para operações diferentes, eliminando o uso de nomes de funções diferentes.
  • A flexibilidade e a manutenção do código se tornam mais fáceis.
  • No caso de substituição, a classe filho pode ter funções da classe pai e pode até ter sua própria implementação dessa função.
  • Os objetos podem ser referenciados e as funções da classe pai e da classe filho podem ser acessadas pela classe filho.

Conclusão

Agora entendemos claramente os conceitos de sobrecarga e substituição. Na sobrecarga, precisamos garantir que a diferença nas funções sobrecarregadas exista com base no tipo de retorno ou nos parâmetros, embora a definição da função dentro deles seja igual ou diferente.

E, no caso de substituição, por ser um conceito de programação orientada a objetos, só podemos utilizar na forma de classes usando a funcionalidade de herança.

Artigos recomendados

Este é um guia para sobrecarregar e substituir em C ++. Aqui discutimos a introdução, como funciona, sintaxe, exemplos e vantagens de sobrecarregar e substituir em C ++ com implementação de código. Você também pode consultar os seguintes artigos para saber mais -

  1. Sobrecarga em C ++
  2. Sobrecarga vs Substituição
  3. Substituindo em PHP
  4. Substituindo em C ++
  5. Substituindo em Java
  6. Polimorfismo em Java
  7. Os 11 principais recursos e vantagens do C ++
  8. Substituindo em Python | Função e Regras