Substituição de função em C++ [sobrecarga de função versus substituição com exemplos]
Publicados: 2021-05-25A substituição de função em C++ é um recurso que nos permite usar uma função na classe filha que já está presente em sua classe pai. A classe filha herda todos os membros de dados e as funções de membro presentes na classe pai. Se você deseja substituir qualquer funcionalidade na classe filha, você pode implementar a substituição de função. A substituição de função significa criar uma versão mais recente da função de classe pai na classe filha.
Índice
Funções C++
Uma função C++ é um grupo de instruções que se reúnem para executar uma tarefa. Todo programa tem pelo menos uma função main() e certos programas podem ter funções adicionais.
A declaração da função transmite ao compilador o nome da função, os parâmetros e o tipo de retorno. Uma definição de função determina o corpo da função. A biblioteca padrão C++ consiste em muitas funções internas que o programa pode chamar. Uma função pode ser um método, um procedimento ou uma sub-rotina.
Definindo uma função
A sintaxe geral de uma função C++ é:
return_type function_name(lista de parâmetros) {
corpo da função
}
Qualquer função C++ compreende um cabeçalho de função e um corpo. Os componentes de uma função C++ são:
Tipo de retorno – O tipo de retorno representa o tipo do valor de retorno da função.
Nome da Função- Isto denota o nome da função. O nome da função junto com a lista de parâmetros formam a assinatura da função.
Parâmetros – Um parâmetro é um espaço reservado para o valor retornado pela função. Quando uma função é chamada, um valor é passado para o parâmetro que é chamado de parâmetro real.
Corpo da Função- O corpo da função constitui a lista de instruções que definem o que a função fará.
Chamando uma função
Para usar uma função em C++, você deve invocar ou chamar a função. O controle é transferido para a função, a função então executa a tarefa desejada e a instrução return retorna o controle de volta ao programa principal.
Você precisa passar os parâmetros necessários, incluindo o nome da função, para chamar uma função. Se a função retornar um valor, o valor poderá ser armazenado. Existem algumas maneiras pelas quais os argumentos podem ser passados para uma função ao chamá-la. Os tipos de chamada são Chamada por Valor, Chamada por Referência e Chamada por Ponteiro.
Sobreposição de funções em C++
Quando uma classe derivada ou classe filha define uma função que já está definida na classe base ou na classe pai, ela é chamada de substituição de função em C++. A substituição de função nos ajuda a obter polimorfismo de tempo de execução. Ele permite que os programadores executem a implementação específica de uma função já usada na classe base.
Exemplo:
Fonte
Estude o exemplo dado acima. Aqui a classe pai é “Base” e a classe filha é “Derivada”.
A saída do programa acima será:
Função derivada
A função print() é declarada nas classes Base e Derived. Quando chamamos a função print() através do objeto da classe Derived, “derived1”, o print() da classe Derived é invocado e executado sobrescrevendo a mesma função da classe Base.
Funcionamento do Princípio de Substituição da Função
Fonte
Como você pode ver na imagem acima, a função da classe Base foi substituída porque chamamos a mesma função através do objeto da classe Derived.
Se chamarmos a função print() através de um objeto da classe Base, a função não será substituída. Por exemplo:
//Chama a função da classe Base
Base base1;
base1.print(); // Saída: Função Base
A saída do código acima será:
Função básica
Como acessar funções substituídas em C++
Você deve usar o operador de resolução de escopo, “::” para acessar a função substituída. Outra maneira de acessar a função substituída é usar o ponteiro da classe base para apontar para um objeto da classe derivada e chamar a função por meio do ponteiro.
Exemplo:
Fonte
A saída do programa acima será:
Função derivada
Função básica
Funcionamento do acesso da função substituída
Fonte
Aqui a instrução derivada 1.print() acessa a função print() da classe Derived e a instrução derivada2.Base::print() acessa a função print() da classe Base.
Chamando uma função substituída C++ da classe derivada
Neste código, chamamos a função substituída de dentro da própria classe Derived.
Funcionamento da chamada de função substituída da classe Derived
Fonte
O comando Base::print() chama a função substituída de dentro da classe Derived.
Aprenda cursos de engenharia de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.
Sobrecarga de função vs. Sobrecarga de função
A sobrecarga de função é obtida em tempo de compilação e pode ser feita na classe base e na classe derivada. Ele ajuda a fornecer várias definições das funções alterando a assinatura das funções, como tipo de dados de parâmetros ou tipos de retorno.
A substituição de função é obtida em tempo de execução. Na substituição, a classe base é redefinida na classe derivada com o mesmo tipo de retorno e parâmetros. Outras diferenças entre substituição de função e sobrecarga de função em C++ são:
1. Herança
A substituição de função pode ser usada apenas com herança de classe, enquanto a sobrecarga de função não requer herança de classe.
2. Assinatura de Função
As funções sobrecarregadas diferem na assinatura tanto no número de parâmetros quanto no tipo de parâmetros. Na substituição de função, as assinaturas de função permanecem as mesmas.
3. Escopo da Função
As funções substituídas variam em escopo, enquanto as funções sobrecarregadas têm o mesmo escopo.
4. Comportamento da Função
A substituição de função é essencial quando uma função de classe derivada deve ser executada de maneira diferente ou com funcionalidade adicional da função de classe base. A sobrecarga de função é implementada quando funções com o mesmo nome precisam ter comportamentos diferentes dependendo dos parâmetros passados a elas.
Se você estiver interessado em aprender mais sobre desenvolvimento de software full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, mais de 9 projetos, e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.
O que é substituição de função?
A substituição de função é um conceito em programação orientada a objetos que permite que uma função dentro de uma classe derivada substitua uma função em sua classe base, mas com uma assinatura diferente (e geralmente com uma implementação diferente). Um aspecto chave disso é que não é possível para a classe derivada “desfazer” as alterações na classe base, ou pelo menos não é possível sem editar a classe base ainda mais. Um uso comum da substituição de função é fornecer uma implementação padrão na classe base e, em seguida, substituir por uma implementação específica na classe derivada.
Quais são as diferenças entre substituição de função e sobrecarga?
A substituição de função ocorre quando você cria uma função com o mesmo nome de uma função que já existe em uma classe base. Quando isso acontecer, a nova função substituirá a função existente e poderá ser usada no lugar da função original. A sobrecarga ocorre quando você cria funções com o mesmo nome, mas com parâmetros diferentes. Quando isso acontecer, a nova função será chamada além da função original, e ambas as funções podem ser usadas em qualquer contexto sem nenhum problema.