logo

Funcions de membre Const en C++

Les funcions de membre constant són aquelles funcions a les quals se'ls nega el permís per canviar els valors dels membres de dades de la seva classe. Per fer que una funció membre sigui constant, la paraula clau const s'afegeix al prototip de la funció i també a la capçalera de la definició de la funció.

Igual que les funcions membre i els arguments de funció membre, els objectes d'una classe també es poden declarar com a const. Un objecte declarat com a const no es pot modificar i, per tant, només pot invocar funcions membre const, ja que aquestes funcions asseguren no modificar l'objecte. Es pot crear un objecte const prefixant la paraula clau const a la declaració d'objecte. Qualsevol intent de canviar el membre de dades dels objectes const provoca un error en temps de compilació.



Sintaxi

La funció membre const es pot definir de tres maneres:

1. Per a la declaració de funcions dins d'una classe.

 return_type function_name () const ;>

Exemple:

int get_data() const;>

2. Per a la definició de funcions dins de la declaració de classe.

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

Exemple:



int get_data() const { //function body }>

3. Per a la definició de funcions fora de la classe.

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

Exemple:

int Demo :: get_data() const { }>

Punts importants

  • Quan una funció es declara com a const, es pot cridar a qualsevol tipus d'objecte, objecte const així com objectes no const.
  • Sempre que un objecte es declara com a const, s'ha d'inicialitzar en el moment de la declaració. tanmateix, la inicialització de l'objecte mentre es declara només és possible amb l'ajuda dels constructors.
  • Una funció es converteix en const quan s'utilitza la paraula clau const a la declaració de la funció. La idea de les funcions const és no permetre que modifiquin l'objecte sobre el qual es criden.
  • Es recomana fer que les funcions siguin constants com sigui possible per evitar canvis accidentals als objectes.

Exemples de funcions de membre Const

Exemple 1

El programa C++ següent demostra que els membres de dades es poden actualitzar en una funció membre que no és constant.

C++






// C++ program to demonstrate that data members can be> // updated in a member function that is not constant.> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int> a) { x = a; }> >// non const member function> >// data can be updated> >int> get_data()> >{> >++x;> >return> x;> >}> };> main()> {> >Demo d;> >d.set_data(10);> >cout << d.get_data();> >return> 0;> }>

>

>

Sortida

11>

Exemple 2

El programa C++ següent demostra que les dades no es poden actualitzar en una funció membre de Constant.

C++




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

>

>

Sortida

./Solution.cpp: In member function 'int Demo::get_data() const': ./Solution.cpp:17:11: error: increment of member 'Demo::x' in read-only object ++x; ^>

Exemple 3

El codi C++ següent mostra com definir funcions de membre constant fora de la definició de classe i mostra l'ús d'una funció de membre constant per establir i recuperar el valor d'una variable de membre privat.

C++


què és una pila en java



// Constant member function defined outside the class> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int>);> >// const member function> >int> get_data()>const>;> };> // Function definition for setting the value of x.> void> Demo::set_data(>int> a) { x = a; }> // Function definition for retrieving the value of x (const> // member function).> int> Demo::get_data()>const> {>return> x; }> main()> {> >Demo d;> >// Set the value of x to 10 using the non-const member> >// function.> >d.set_data(10);> >// Print the value of x using the const member function.> >cout << d.get_data();> >return> 0;> }>

>

>

Sortida

10>

Exemple 4

El programa C++ següent demostra que les funcions const poden ser cridades per objectes que no siguin const.

C++




// C++ program to demonstrate that const functions can be> // called by non const objects> #include> using> namespace> std;> class> Test {> >int> value;> public>:> >Test(>int> v = 0) { value = v; }> >// const member function> >int> getValue()>const> {>return> value; }> };> int> main()> {> >// non const object> >Test t(20);> >cout << t.getValue();> >return> 0;> }>

>

>

Sortida

20>

Quan una funció es declara com a const, es pot cridar a qualsevol tipus d'objecte. Les funcions no const només poden ser cridades per objectes no const.

Per exemple, el programa següent té errors de compilador.

C++




// C++ program that demonstrate that non-const functions can> // not be called by const objects> #include> using> namespace> std;> class> Test {> >int> value;> public>:> >Test(>int> v = 0) { value = v; }> >// non const member function> >int> getValue() {>return> value; }> };> int> main()> {> >// const object> >const> Test t;> >cout << t.getValue();> >return> 0;> }>

>

>

Sortida

./d869c7ba-f199-4a67-9449-3936b5db4c5b.cpp: In function 'int main()': ./d869c7ba-f199-4a67-9449-3936b5db4c5b.cpp:14:24: error: passing 'const Test' as 'this' argument of 'int Test::getValue()' discards qualifiers [-fpermissive] cout << t.getValue();>

Vegem un altre exemple:

C++




// Demonstration of constant object,> // show that constant object can only> // call const member function> #include> 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;> >}> >// const member function> >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);> }>

>

>

Sortida

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

Preguntes freqüents sobre les funcions dels membres de Const

Q1. Els objectes const d'una classe poden cridar funcions membres no const?

Resposta:

No, un objecte declarat com a const no es pot modificar i, per tant, només pot invocar funcions membre const, ja que aquestes funcions garanteixen no modificar l'objecte.

P2. Els objectes no const d'una classe poden cridar a la funció de membre const?

Resposta:

anàlisi de cadena a int

Quan una funció es declara com a const, es pot cridar a qualsevol tipus d'objecte.