Funciones miembro const en C++

Las funciones de miembros constantes son aquellas funciones a las que se les niega el permiso para cambiar los valores de los miembros de datos de su clase. Para hacer que una función miembro sea constante, la palabra clave «const» se agrega al prototipo de la función y también al encabezado de definición de la función.

Al igual que las funciones miembro y los argumentos de función miembro, los objetos de una clase también se pueden declarar como const . un objeto declarado como const no se puede modificar y, por lo tanto, solo puede invocar funciones miembro const, ya que estas funciones garantizan que no se modifique el objeto. 
Se puede crear un objeto const anteponiendo la palabra clave const a la declaración del objeto. Cualquier intento de cambiar el miembro de datos de los objetos const da como resultado un error de tiempo de compilación. 

Sintaxis: 

(i)    For function declaration within a class.

<return_type> <function_name>() const

Example:
Int get_data() const;

(ii)    For function definition within the class declaration.

<return_type> <function_name>() const
{
         //function body
}

Example:
int get_data() const
{
               //function body

}

(iii)    For function definition outside the class.

<return_type> <class_name> : : <function_name>() const
{
         //function body
}

Example:
int Demo :: get_data() const
{

}
  • Cuando una función se declara como const, se puede llamar a cualquier tipo de objeto, tanto a objetos const como a objetos que no son const.
  • Cada vez que un objeto se declara como const, debe inicializarse en el momento de la declaración. sin embargo, la inicialización del objeto durante la declaración solo es posible con la ayuda de constructores.

Una función se convierte en const cuando se usa la palabra clave const en la declaración de la función. La idea de las funciones const es no permitirles modificar el objeto en el que se llaman. Se recomienda la práctica de hacer constantes tantas funciones como sea posible para evitar cambios accidentales en los objetos.
El siguiente es un ejemplo simple de una función const. 

C++

// Example: Not a constant member function.
#include<iostream>
using namespace std;
 
class Demo
{
    int x;
     
      public:
     
    void set_data(int a)
    {
        x=a;
    }
  
    int get_data()
     {
         ++x;
         return x;
     }
  
};
 
 
main()
{
    Demo d;
    d.set_data(10);
    cout<<endl<<d.get_data();
 
    return 0;
}
Producción

11

C++

// Example: of Constant member function
 
#include<iostream>
using namespace std;
 
class Demo
{
    int x;
 
      public:
     
    void set_data(int a)
    {
        x=a;
    }
  
     int get_data() const           //constant member function
     {
         ++x;                 // Error while attempting to modify the data member
         return x;
     }
  
};
 
 
main()
{
    Demo d;
    d.set_data(10);
    cout<<endl<<d.get_data();
 
    return 0;
}

C++

// Example: Constant member function defined outside the class
 
#include<iostream>
using namespace std;
 
class Demo
{
    int x;
 
      public:
     
    void set_data(int);
  
     int get_data() const;
  
};
 
void Demo::set_data(int a)
{
    x=a;
}
 
 int Demo::get_data() const
 {
     return x;
 }
 
main()
{
    Demo d;
    d.set_data(10);
    cout<<endl<<d.get_data();
 
    return 0;
}
Producción

10

CPP

#include <iostream>
using namespace std;
 
class Test {
    int value;
 
public:
    Test(int v = 0) { value = v; }
 
    int getValue() const { return value; }
};
 
int main()
{
    Test t(20);
    cout << t.getValue();
    return 0;
}
Producción

20

Cuando una función se declara como const, se puede llamar a cualquier tipo de objeto. Las funciones no constantes solo pueden ser llamadas por objetos no constantes. 
Por ejemplo, el siguiente programa tiene errores de compilación.  

CPP

#include<iostream>
using namespace std;
 
class Test {
    int value;
public:
    Test(int v = 0) {value = v;}
    int getValue() {return value;}
};
 
int main() {
    const Test t;
    cout << t.getValue();
    return 0;
}

Producción: 

 passing 'const Test' as 'this' argument of 'int 
Test::getValue()' discards qualifiers

Veamos otro ejemplo:  

CPP

// Demonstration of constant object,
// show that constant object can only
// call const member function
#include<iostream>
using namespace std;
class Demo
{
    int value;
    public:
    Demo(int v = 0) {value = v;}
    void showMessage()
    {
        cout<<"Hello World We are Tushar, "
        "Ramswarup, Nilesh and Subhash Inside"
        " showMessage() Function"<<endl;
    }
    void display()const
    {
        cout<<"Hello world I'm Rancho "
        "Baba Inside display() Function"<<endl;
    }
};
int main()
{
   //Constant object are initialised at the time of declaration using constructor
    const Demo d1;
    //d1.showMessage();Error occurred if uncomment.
    d1.display();
    return(0);
}
Producción

Hello world I'm Rancho Baba Inside display() Function
OUTPUT : Hello world I'm Rancho Baba Inside display() Function

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *