Anulación de funciones de C ++

En este tutorial, aprenderemos sobre la anulación de funciones en C ++ con la ayuda de ejemplos.

Como sabemos, la herencia es una característica de OOP que nos permite crear clases derivadas a partir de una clase base. Las clases derivadas heredan características de la clase base.

Supongamos que se define la misma función tanto en la clase derivada como en la clase basada. Ahora bien, si llamamos a esta función utilizando el objeto de la clase derivada, se ejecuta la función de la clase derivada.

Esto se conoce como anulación de funciones en C ++. La función en la clase derivada anula la función en la clase base.

Ejemplo 1: Anulación de funciones de 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; )

Salida

 Función derivada

Aquí, la misma función print()se define en ambas clases Basey Derived.

Entonces, cuando llamamos print()desde el Derivedobjeto derivado1, print()desde Derivedse ejecuta anulando la función en Base.

Trabajo de anulación de funciones en C ++

Función de acceso anulado en C ++

Para acceder a la función anulada de la clase base, usamos el operador de resolución de alcance ::.

También podemos acceder a la función anulada usando un puntero de la clase base para apuntar a un objeto de la clase derivada y luego llamar a la función desde ese puntero.

Ejemplo 2: Función anulada de acceso de C ++ a la clase 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; )

Salida

 Función base de función derivada

Aquí, esta declaración

 derived2.Base::print();

accede a la print()función de la clase Base.

Acceda a la función anulada usando el objeto de la clase derivada en C ++

Ejemplo 3: función invalidada de llamada de C ++ desde clase 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; )

Salida

 Función base de función derivada

En este programa, hemos llamado a la función anulada dentro de la Derivedpropia clase.

 class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );

Observe el código Base::print();, que llama a la función anulada dentro de la Derivedclase.

Acceda a la función anulada dentro de la clase derivada en C ++

Ejemplo 4: Función anulada de llamada de C ++ mediante puntero

 // 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.

Articulos interesantes...