logo

Funcțiile membre const în C++

Funcțiile membre constante sunt acele funcții cărora li se refuză permisiunea de a modifica valorile membrilor de date din clasa lor. Pentru a face constantă o funcție membru, cuvântul cheie const este atașat la prototipul funcției și, de asemenea, la antetul definiției funcției.

La fel ca funcțiile membru și argumentele funcției membru, obiectele unei clase pot fi, de asemenea, declarate ca const. Un obiect declarat ca const nu poate fi modificat și, prin urmare, poate invoca numai funcții membre const, deoarece aceste funcții asigură că nu se modifică obiectul. Un obiect const poate fi creat prin prefixarea cuvântului cheie const la declarația obiectului. Orice încercare de a schimba membrul de date al obiectelor const are ca rezultat o eroare de compilare.



Sintaxă

Funcția de membru const poate fi definită în trei moduri:

1. Pentru declararea funcției în cadrul unei clase.

 return_type function_name () const ;>

Exemplu:

șiruri de caractere java concat
int get_data() const;>

2. Pentru definirea funcției în declarația clasei.

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

Exemplu:



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

3. Pentru definirea funcției în afara clasei.

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

Exemplu:

int Demo :: get_data() const { }>

Puncte importante

  • Când o funcție este declarată ca const, aceasta poate fi apelată pe orice tip de obiect, obiect const, precum și obiecte non-const.
  • Ori de câte ori un obiect este declarat ca const, acesta trebuie să fie inițializat în momentul declarării. totuși, inițializarea obiectului în timpul declarației este posibilă numai cu ajutorul constructorilor.
  • O funcție devine const atunci când cuvântul cheie const este utilizat în declarația funcției. Ideea funcțiilor const este să nu le permită să modifice obiectul pe care sunt chemate.
  • Se recomandă exersarea de a face cât mai multe funcții const posibil, astfel încât să fie evitate modificări accidentale ale obiectelor.

Exemple de funcții ale membrilor Const

Exemplul 1

Programul C++ de mai jos demonstrează că membrii datelor pot fi actualizați într-o funcție membru care nu este 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;> }>

>

>

Ieșire

11>

Exemplul 2

Programul C++ de mai jos demonstrează că datele nu pot fi actualizate într-o funcție membru 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;> }>

>

>

Ieșire

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

Exemplul 3

Codul C++ de mai jos demonstrează cum se definesc funcțiile membre constante în afara definiției clasei și prezintă utilizarea unei funcții membru constant pentru a seta și a prelua valoarea unei variabile membre private.

C++




// 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;> }>

>

>

Ieșire

10>

Exemplul 4

Programul C++ de mai jos demonstrează că funcțiile const pot fi apelate de obiecte non-const.

întreg dublu java

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;> }>

>

>

Ieșire

20>

Când o funcție este declarată ca const, aceasta poate fi apelată pe orice tip de obiect. Funcțiile non-const pot fi apelate numai de obiecte non-const.

De exemplu, următorul program are erori de compilator.

C++

c# datetime




// 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;> }>

>

>

Ieșire

./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();>

Să ne uităm la un alt exemplu:

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);> }>

>

>

Ieșire

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

Întrebări frecvente despre funcțiile membrilor Const

Î1. Obiectele const ale unei clase pot apela funcții membre non-const?

Răspuns:

Nu, un obiect declarat ca const nu poate fi modificat și, prin urmare, poate invoca numai funcții membre const, deoarece aceste funcții asigură că nu se modifică obiectul.

Q2. Obiectele non-const ale unei clase pot apela const membru?

Răspuns:

Când o funcție este declarată ca const, aceasta poate fi apelată pe orice tip de obiect.