Clases anónimas en C++

Una clase anónima es una clase que no tiene nombre. C++ admite esta función.

  • Estas clases no pueden tener un constructor pero pueden tener un destructor.
  • Estas clases no se pueden pasar como argumentos a las funciones ni se pueden usar como valores de retorno de las funciones.

Ejemplos para ilustrar Clases Anónimas

  1. Creating single object of Anonymous Class : In the first Example, Anonymous class is created with object name obj1. The scope of the obj1 is throughout the program. So, we can access this into the main function. In main, using obj1, a call is given to member functions of the anonymous class.

    // CPP program to illustrate 
    // concept of Anonymous Class
    #include <iostream>
    using namespace std;
      
    // Anonymous Class : Class is not having any name
    class
    {
        // data member
        int i; 
    public:
        void setData(int i)
        {
            // this pointer is used to differentiate
            // between data member and formal argument.
            this->i = i;
        }
        void print()
        {
            cout << "Value for i : " << this->i << endl;
        }
          
    } obj1;     // object for anonymous class
      
    // Driver function
    int main()
    {
        obj1.setData(10);
        obj1.print();
        return 0;
    }

    Output :

    Value for i : 10
    
  2. Creación de dos objetos de clase anónima: en el segundo ejemplo, creamos dos objetos obj1 y obj2 para la clase anónima y llamamos a las funciones miembro de la clase. El alcance de obj1 y obj2 se encuentra en todo el programa. Asimismo, podemos crear múltiples objetos para una clase anónima.

    // CPP program to illustrate 
    // concept of Anonymous Class
    #include <iostream>
    using namespace std;
      
    // Anonymous Class : Class is not having any name
    class
    {
        // data member
        int i; 
    public:
        void setData(int i)
        {
            // this pointer is used to differentiate
            // between data member and formal argument.
            this->i = i;
        }
        void print()
        {
            cout << "Value for i : " << this->i << endl;
        }
          
    } obj1, obj2;    // multiple objects for anonymous class
      
    // Driver function
    int main()
    {
        obj1.setData(10);
        obj1.print();
      
        obj2.setData(20);
        obj2.print();
        return 0;
    }

    Producción :

    Value for i : 10
    Value for i : 20
    
  3. Restricción del alcance de la clase anónima: para restringir el alcance de los objetos de la clase anónima, podemos tomar la ayuda de typedef. En el tercer ejemplo, al usar typedef podemos darle un nombre conveniente a la clase y usar ese nombre que hemos creado para múltiples objetos obje1 y obj2 para la clase anónima. Aquí podemos controlar el alcance de los objetos obj1 y obj2, que están dentro de la función principal.

    // CPP program to illustrate 
    // concept of Anonymous Class
    // by scope restriction
    #include<iostream>
    using namespace std;
      
    // Anonymous Class : Class is not having any name
    typedef class
    {
        // data member
        int i; 
    public:
        void setData(int i)
        {
            // this pointer is used to differentiate 
            // between data member and formal argument.
            this->i = i;
        }
        void print()
        {
            cout << "Value for i :" << this->i << endl;
        }
          
    } myClass;      // using typedef give a proper name
      
    // Driver function
    int main()
    {
        // multiple objects
        myClass obj1, obj2; 
        obj1.setData(10);
        obj1.print();
      
        obj2.setData(20);
        obj2.print();
        return 0;
    }

    Producción :

    Value for i : 10
    Value for i : 20
    

Publicación traducida automáticamente

Artículo escrito por AlankarShelar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *