Requisitos previos: modificadores de acceso en C++ , polimorfismo en tiempo de ejecución
Privado: solo las funciones dentro de la clase pueden acceder a los miembros de la clase declarados como privados . No se permite el acceso directo a ellos por ningún objeto o función fuera de la clase. Solo las funciones miembro o las funciones amigas pueden acceder a los datos privados de los miembros de una clase.
Podemos acceder al método privado en otra clase usando la función virtual . Una función virtual es una función miembro que se declara dentro de una clase base y se redefine (anulada) por una clase derivada. Hacer referencia a un objeto de clase derivada mediante un puntero o una referencia a la clase base puede llamar a una función virtual para ese objeto y ejecutar la versión de la función de la clase derivada.
Programa 1: Para demostrar el modificador de acceso privado
C++
// C++ program to demonstrate private // access modifier #include <iostream> using namespace std; // Parent class having virtual // function disp() class Parent { public: // Create virtual function virtual void disp() { cout << "This is the public disp" << " method of Parent class" << endl; } }; // Child class inherit to parent class class Child : public Parent { private: int secret_key; // Private method which will be called // Override the method of parent class void disp() { cout << "This is the private disp " << "method of child class " << endl; cout << "The key is " << secret_key << endl; } public: // Constructor of the child class Child(int key) { secret_key = key; } }; // Driver Code int main() { // Create object of child class Child child(1019); // Upcasting Parent* obj = &child; // Function call of child class obj->disp(); return 0; }
This is the private disp method of child class The key is 1019
Explicación :
En el programa anterior, la clase padre tiene una función void disp() que es una función virtual . La clase secundaria ha creado otra función con el mismo nombre, es decir, void disp() pero esa función es privada, lo que significa que ningún objeto o función fuera de la clase puede acceder directamente a ella. En main() , primero estamos creando un objeto de clase secundaria y pasando un parámetro para inicializar la variable secret_key en la clase secundaria. Después de eso, estamos almacenando la dirección del objeto de clase secundaria en un puntero de clase base, esto también se llama upcasting. Ahora, el puntero de la clase base contiene la dirección del objeto de la clase secundaria, pero al llamar a una función usando el puntero de la clase base, solo llamará a las funciones de la clase base. Pero si quiere que llame a funciones de clase secundaria para hacer que las funciones de clase base sean virtuales . Esto también se denomina polimorfismo en tiempo de ejecución.
Protegido: el modificador de acceso protegido es similar al de los modificadores de acceso privado, la diferencia es que los miembros de la clase declarados como protegidos son inaccesibles fuera de la clase, pero cualquier subclase (clase derivada) de esa clase puede acceder a ellos.
Programa 2: Para demostrar el modificador de acceso protegido
C++
// C++ program to demonstrate protected // access modifier #include <iostream> using namespace std; // Parent class having virtual // function disp() class Parent { public: // Create virtual function virtual void disp() { cout << "This is the public disp" << " method of Parent class" << endl; } }; // Child class inherit to parent class class Child : public Parent { protected: int secret_key; // Private method which will be called // Override the method of parent class void disp() { cout << "This is the protected disp " << "method of child class " << endl; cout << "The key is " << secret_key << endl; } public: // Constructor of child class Child(int key) { secret_key = key; } }; // Driver Code int main() { // Create object of child class Child child(1019); // Upcasting Parent* obj = &child; // Function call of child class obj->disp(); return 0; }
This is the protected disp method of child class The key is 1019
Explicación :
En el ejemplo anterior, la clase principal tiene la función void disp(), que es una función virtual . La clase secundaria ha creado otra función con el mismo nombre, es decir, void disp() pero esa función es privada, lo que significa que ningún objeto o función fuera de la clase puede acceder directamente a ella. En main(), primero estamos creando un objeto de clase secundaria y pasando un parámetro para inicializar la variable secret_key en la clase secundaria, luego almacenamos la dirección del objeto de clase secundaria en un puntero de clase base, esto también se denomina conversión ascendente. Ahora, el puntero de la clase base contiene la dirección del objeto de la clase secundaria, pero al llamar a una función usando el puntero de la clase base, solo llamará a las funciones de la clase base. Pero si quiere que llame a funciones de clase secundaria para hacer que las funciones de clase base sean virtuales . Esto también se llama polimorfismo en tiempo de ejecución .
Publicación traducida automáticamente
Artículo escrito por sachinbhutani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA