Neste tutorial, aprenderemos sobre substituição de funções em C ++ com a ajuda de exemplos.
Como sabemos, a herança é um recurso da OOP que nos permite criar classes derivadas de uma classe base. As classes derivadas herdam recursos da classe base.
Suponha que a mesma função seja definida na classe derivada e na classe baseada. Agora, se chamarmos essa função usando o objeto da classe derivada, a função da classe derivada será executada.
Isso é conhecido como substituição de função em C ++. A função na classe derivada substitui a função na classe base.
Exemplo 1: Substituição de função C ++
// C++ program to demonstrate function overriding #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1; derived1.print(); return 0; )
Resultado
Função Derivada
Aqui, a mesma função print()
é definida nas classes Base
e Derived
.
Portanto, quando chamamos print()
do Derived
objeto derivado1, o print()
de Derived
é executado substituindo a função em Base
.

Acessar função substituída em C ++
Para acessar a função substituída da classe base, usamos o operador de resolução de escopo ::
.
Também podemos acessar a função substituída usando um ponteiro da classe base para apontar para um objeto da classe derivada e, em seguida, chamando a função desse ponteiro.
Exemplo 2: função substituída de acesso C ++ à classe base
// C++ program to access overridden function // in main() using the scope resolution operator :: #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1, derived2; derived1.print(); // access print() function of the Base class derived2.Base::print(); return 0; )
Resultado
Função de base de função derivada
Aqui, esta declaração
derived2.Base::print();
acessa a print()
função da classe Base.

Exemplo 3: função substituída de chamada C ++ da classe derivada
// C++ program to call the overridden function // from a member function of the derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; // call overridden function Base::print(); ) ); int main() ( Derived derived1; derived1.print(); return 0; )
Resultado
Função de base de função derivada
Neste programa, chamamos a função substituída dentro da Derived
própria classe.
class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );
Observe o código Base::print();
, que chama a função substituída dentro da Derived
classe.

Exemplo 4: função substituída de chamada C ++ usando ponteiro
// C++ program to access overridden function using pointer // of Base type that points to an object of Derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function"
Output
Base Function
In this program, we have created a pointer of
Base
type named ptr. This pointer points to the Derived
object derived1.
// pointer of Base type that points to derived1 Base* ptr = &derived1;
When we call the
print()
function using ptr, it calls the overridden function from Base
.
// call function of Base class using ptr ptr->print();
This is because even though ptr points to a
Derived
object, it is actually of Base
type. So, it calls the member function of Base
.
In order to override the
Base
function instead of accessing it, we need to use virtual functions in the Base
class.