Funkcije stalnih članov so tiste funkcije, ki jim je zavrnjeno dovoljenje za spreminjanje vrednosti podatkovnih članov njihovega razreda. Da postane funkcija članica konstantna, je ključna beseda const dodana prototipu funkcije in tudi glavi definicije funkcije.
Tako kot funkcije članov in argumente funkcij članov je tudi objekte razreda mogoče deklarirati kot const. Objekta, deklariranega kot const, ni mogoče spreminjati in zato lahko prikliče samo funkcije člana const, saj te funkcije zagotavljajo, da se objekt ne spremeni. Objekt const lahko ustvarite tako, da v deklaracijo objekta dodate ključno besedo const. Vsak poskus spreminjanja podatkovnega člana objektov const povzroči napako med prevajanjem.
Sintaksa
Funkcijo člana const je mogoče definirati na tri načine:
1. Za deklaracijo funkcij znotraj razreda.
return_type function_name () const ;>
primer:
int get_data() const;>
2. Za definicijo funkcije znotraj deklaracije razreda.
return_type function_name () const { //function body }> primer:
int get_data() const { //function body }> 3. Za definicijo funkcije zunaj razreda.
return_type class_name::function_name () const { //function body }> primer:
int Demo :: get_data() const { }> Pomembne točke
- Ko je funkcija deklarirana kot const, jo je mogoče poklicati na katero koli vrsto objekta, const objekt kot tudi nekonstanten objekt.
- Kadarkoli je objekt deklariran kot const, ga je treba inicializirati v času deklaracije. inicializacija objekta med deklaracijo pa je možna le s pomočjo konstruktorjev.
- Funkcija postane const, ko je v deklaraciji funkcije uporabljena ključna beseda const. Zamisel funkcij const je, da jim ne dovolijo spreminjanja predmeta, na katerem so poklicane.
- Priporočljivo je, da naredite čim več funkcij konstantnih, da se izognete nenamernim spremembam objektov.
Primeri funkcij Const Member
Primer 1
Spodnji program C++ prikazuje, da je podatkovne člane mogoče posodobiti v funkciji člana, ki ni konstantna.
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;> }> |
>
>Izhod
11>
Primer 2
Spodnji program C++ prikazuje, da podatkov ni mogoče posodobiti v funkciji člana Constant.
C++
klicanje funkcije js iz html
// 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;> }> |
>
>
Izhod
./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; ^>
Primer 3
Spodnja koda C++ prikazuje, kako definirati funkcije konstantnega člana zunaj definicije razreda, in prikazuje uporabo funkcije konstantnega člana za nastavitev in pridobivanje vrednosti spremenljivke zasebnega člana.
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;> }> |
>
>Izhod
10>
Primer 4
Spodnji program C++ prikazuje, da lahko funkcije const kličejo objekti, ki niso 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;> }> |
>
>Izhod
20>
Ko je funkcija deklarirana kot const, jo je mogoče poklicati na katero koli vrsto objekta. Nekonstantne funkcije lahko kličejo samo nekonstantni objekti.
Naslednji program ima na primer napake prevajalnika.
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;> }> |
hrithik roshan
>
>
Izhod
./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();>
Poglejmo še en primer:
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);> }> |
>
>Izhod
Hello world I'm Rancho Baba Inside display() Function>
Pogosta vprašanja o funkcijah Const Member
Q1. Ali lahko konstantni objekti razreda kličejo nekonstantne članske funkcije?
odgovor:
Ne, objekta, deklariranega kot const, ni mogoče spremeniti in zato lahko prikliče samo funkcije člana const, saj te funkcije zagotavljajo, da se objekt ne spremeni.
Q2. Ali lahko nekonstantni objekti razreda kličejo funkcijo člana const?
odgovor:
Ko je funkcija deklarirana kot const, jo je mogoče poklicati na katero koli vrsto objekta.