Em C ++, se existe uma função com o mesmo nome na classe Base e Derived, a função de classe derivada substitui a função de classe base. Isso mostra que, se uma função for chamada com o objeto da classe derivada, em vez da função da classe base, a função de classe derivada será executada. Isso é conhecido como a função substituindo em C++, e permite que classes derivadas modifiquem o comportamento da função de classe base para atender às suas necessidades específicas. Substituindo é importante, pois permite a reutilização de código, facilitando a modificação dos programadores e removendo a necessidade de escrever o código do zero.
Neste artigo, mostraremos como usar o "sobrepor" Na linguagem de programação C ++.
Conteúdo deste artigo:
Como usar a substituição em C++
Usar 'sobrepor' Em C ++, simplesmente precisamos adicioná -lo após a declaração de função na classe derivada. Aqui está um exemplo:
Exemplo 1: Função C ++ substituindo
O código fornecido demonstra função substituindo em C++.
#incluir
usando namespace std;
classe pai
público:
void linuxhint_print ()
cout << "This is Base Function" << endl;
;
Criança Criança: Pai público
público:
void linuxhint_print ()
cout << "This is Derived Function" << endl;
;
int main ()
Criança criança_derived;
Criança_derivou.Linuxhint_print ();
retornar 0;
Temos uma classe pai com uma função chamada Linuxhint_print () que imprime uma mensagem para o console. Em seguida, criamos uma classe infantil que herda publicamente da classe pai e substitui o Linuxhint_print () função com sua própria implementação que também imprime uma mensagem para o console.
Na função Main (), um objeto da classe infantil é criado e nomeado como Linuxhint_print () função. Desde que a classe infantil substitui o Linuxhint_print () função da classe pai, a saída será Esta é a função derivada em vez de Esta é a função base.
Exemplo 2: C ++ Access Substitued Função para a classe base
Às vezes, podemos querer chamar a função substituída na classe base da classe derivada. Podemos fazer isso usando o operador de resolução de escopo '::'. Aqui está um exemplo:
#incluir
usando namespace std;
classe base
público:
Virtual Void Test ()
cout << "This is Base Class" << endl;
;
classe Derivada: Base Pública
público:
Void test ()
Base :: test ();
cout << "This is Derived Class" << endl;
;
int main ()
Derivado derivadobj;
DerivadoBJ.teste();
retornar 0;
O código acima define duas classes Base e Derivado, onde a classe derivada herda da classe base. Ambas as classes têm uma função chamada test () que exibe a mensagem no console. A função test () na classe base é declarada como virtual, indicando que pode ser substituída por classes derivadas.
Na classe derivada, substituímos a função test () e chamamos a função de teste da classe base () usando Base :: test () imprimir Isso é base Aula para o console. Nós então imprimimos Esta é a classe derivada para o console depois de chamar a função de teste da classe base ().
Se criarmos um objeto da classe derivada e chamarmos sua função de teste (), a saída será Isso é base Aula seguido pela Esta é a classe derivada, indicando que a classe derivada substituiu a função de teste da classe base () e adicionou seu próprio comportamento.
Exemplo 3: Função de substituição de chamada C ++ da classe derivada
Também podemos chamar a função substituída na classe base de fora da hierarquia de classe usando um ponteiro para a classe base. Aqui está um exemplo:
Este código demonstra a substituição da função em C ++ usando herança.
#incluir
usando namespace std;
classe base
público:
Void test ()
cout << "This is Base Function" << endl;
;
classe Derivada: Base Pública
público:
Void test ()
cout << "This is Derived Function" << endl;
// Função substituída de chamada
Base :: test ();
;
int main ()
Derivado de derivado1;
derivado1.teste();
retornar 0;
Existem duas classes definidas, base e derivadas. Aqui no código acima, a classe derivada é derivada da base com a ajuda do especificador de herança pública.
Ambas as classes têm uma função de membro nomeada teste(), que exibe uma mensagem no console. No entanto, na classe derivada, a função test () é substituída para imprimir uma mensagem diferente e também chamar a função test () da classe base usando o operador de resolução de escopo (: :).
A função principal () tem um objeto de classe derivada, e sua função de teste () é chamada. Quando a função test () é chamada no objeto derivado1, ele imprime Esta é a função derivada para o console e depois chama a função test () da classe base, que imprime Esta é a função base para o console.
Exemplo 4: Função de substituição de chamada C ++ usando ponteiro
Também podemos chamar a função substituída na classe base usando um ponteiro para a classe derivada. Aqui está um exemplo:
#incluir
usando namespace std;
classe base
público:
Void test ()
cout << "This is Base Function" << endl;
;
classe Derivada: Base Pública
público:
Void test ()
cout << "This is Derived Function" << endl;
;
int main ()
Derivado de derivado1;
// ponteiro para derivado1
Base* ptr = &derived1;
// Função de classe base de chamada
ptr-> test ();
retornar 0;
No programa acima, duas classes são definidas, base e derivadas. Ambas as classes têm uma função de membro chamada test () que exibe uma mensagem no console.
No principal() Função, um objeto da classe derivado é criado e um ponteiro PTR da base do tipo é criado e inicializado para apontar para o objeto Derivado1.
A função test () é chamada no ptr ponteiro, que é da base do tipo. A função test () na classe base pode ser substituída em qualquer classe derivada usando o ponteiro.
Aqui quando a função test () é chamada no ptr ponteiro, ele imprime Esta é a função base para o console em vez de Esta é a função derivada.
Diferença entre substituir e sobrecarga em c++
Substituição e sobrecarga são dois conceitos importantes em programação orientada a objetos. Em C ++, eles são usados para fornecer comportamento polimórfico, o que permite que diferentes objetos respondam de maneira diferente à mesma mensagem.
Sobrecarga está criando várias funções com o mesmo nome, mas com parâmetros diferentes ou tipos de argumento.
Substituindo, Por outro lado, refere -se ao processo de redefinir uma função em uma classe derivada que contém o mesmo nome que uma função de classe base.
O diferença -chave Entre a substituição e a sobrecarga é que a substituição envolve redefinir uma função em uma classe derivada com o mesmo nome e assinatura que a da classe base. Por outro lado, a sobrecarga envolve a criação de várias tarefas com o mesmo nome, mas parâmetros diferentes ou tipos de argumento.
Conclusão
O 'sobrepor' em C ++ pode garantir que a função na classe derivada esteja substituindo a função virtual da classe base. Este artigo discute diferentes maneiras de substituir uma função. No C ++, a função pode ser substituída nos dois sentidos da base para derivada ou vice -versa, também podemos definir um ponteiro para uma classe base e substituir uma função derivada nela.