Substituição de função C ++

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 Basee Derived.

Portanto, quando chamamos print()do Derivedobjeto derivado1, o print()de Derivedé executado substituindo a função em Base.

Trabalho de substituição de função em C ++

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.

Função substituída de acesso usando objeto de classe derivada em C ++

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 Derivedpró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 Derivedclasse.

Função substituída de acesso dentro da classe derivada em C ++

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.

Artigos interessantes...