Le funzioni membro costanti sono quelle funzioni a cui viene negata l'autorizzazione a modificare i valori dei membri dati della relativa classe. Per rendere costante una funzione membro, la parola chiave const viene aggiunta al prototipo della funzione e anche all'intestazione della definizione della funzione.
Come le funzioni membro e gli argomenti delle funzioni membro, anche gli oggetti di una classe possono essere dichiarati come const. Un oggetto dichiarato come const non può essere modificato e quindi può richiamare solo funzioni membro const poiché queste funzioni garantiscono di non modificare l'oggetto. Un oggetto const può essere creato anteponendo la parola chiave const alla dichiarazione dell'oggetto. Qualsiasi tentativo di modificare il membro dati degli oggetti const genera un errore in fase di compilazione.
Sintassi
La funzione membro const può essere definita in tre modi:
1. Per la dichiarazione di funzioni all'interno di una classe.
return_type function_name () const ;>
Esempio:
int get_data() const;>
2. Per la definizione della funzione all'interno della dichiarazione della classe.
return_type function_name () const { //function body }> Esempio:
int get_data() const { //function body }> 3. Per la definizione di funzioni al di fuori della classe.
return_type class_name::function_name () const { //function body }> Esempio:
int Demo :: get_data() const { }> Punti importanti
- Quando una funzione viene dichiarata come const, può essere chiamata su qualsiasi tipo di oggetto, oggetto const e oggetti non const.
- Ogni volta che un oggetto viene dichiarato come const, deve essere inizializzato al momento della dichiarazione. tuttavia, l'inizializzazione dell'oggetto durante la dichiarazione è possibile solo con l'aiuto dei costruttori.
- Una funzione diventa const quando la parola chiave const viene utilizzata nella dichiarazione della funzione. L'idea delle funzioni const è di non consentire loro di modificare l'oggetto su cui vengono chiamate.
- Si consiglia di rendere const il maggior numero possibile di funzioni in modo da evitare modifiche accidentali agli oggetti.
Esempi di funzioni membro Const
Esempio 1
Il programma C++ seguente dimostra che i membri dati possono essere aggiornati in una funzione membro che non è costante.
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;> }> |
>
>Produzione
11>
Esempio 2
Il programma C++ seguente dimostra che i dati non possono essere aggiornati in una funzione membro Constant.
restituendo array in Java
C++
chiave di inserimento del laptop
// 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;> }> |
>
>
Produzione
./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; ^>
Esempio 3
Il codice C++ seguente dimostra come definire funzioni membro costanti all'esterno della definizione della classe e mostra l'utilizzo di una funzione membro costante per impostare e recuperare il valore di una variabile membro privata.
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;> }> |
>
>Produzione
10>
Esempio 4
Il programma C++ riportato di seguito dimostra che le funzioni const possono essere chiamate da oggetti non 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;> }> |
>
>Produzione
20>
Quando una funzione viene dichiarata come const, può essere chiamata su qualsiasi tipo di oggetto. Le funzioni non const possono essere chiamate solo da oggetti non const.
Ad esempio, il seguente programma presenta errori del compilatore.
installazione esperta
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;> }> |
>
>
Produzione
./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();>
Diamo un’occhiata a un altro esempio:
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);> }> |
>
>Produzione
Hello world I'm Rancho Baba Inside display() Function>
Domande frequenti sulle funzioni membro Const
Q1. Gli oggetti const di una classe possono chiamare funzioni membro non const?
Risposta:
peso di kat timpf
No, un oggetto dichiarato come const non può essere modificato e quindi può richiamare solo funzioni membro const poiché queste funzioni assicurano di non modificare l'oggetto.
Q2. Gli oggetti non const di una classe possono chiamare la funzione membro const?
Risposta:
Quando una funzione viene dichiarata come const, può essere chiamata su qualsiasi tipo di oggetto.