Vakiojäsenfunktiot ovat niitä toimintoja, joilta evätään lupa muuttaa luokkansa datajäsenten arvoja. Jotta jäsenfunktiosta tulee vakio, avainsana const liitetään funktion prototyyppiin ja myös funktion määritelmän otsikkoon.
Kuten jäsenfunktiot ja jäsenfunktion argumentit, luokan objektit voidaan myös ilmoittaa const. Const:ksi ilmoitettua objektia ei voi muokata, joten se voi kutsua vain const-jäsentoimintoja, koska nämä toiminnot varmistavat, että objektia ei muokata. Const-objekti voidaan luoda lisäämällä objektin määrityksen eteen const-avainsana. Jokainen yritys muuttaa const-objektien datajäsentä johtaa käännösaikavirheeseen.
Syntaksi
Const-jäsenfunktio voidaan määrittää kolmella tavalla:
1. Funktiomäärityksiä luokassa.
return_type function_name () const ;>
Esimerkki:
int get_data() const;>
2. Funktioiden määrittelyyn luokkailmoituksessa.
return_type function_name () const { //function body }> Esimerkki:
int get_data() const { //function body }> 3. Luokan ulkopuolisen funktion määrittelyyn.
return_type class_name::function_name () const { //function body }> Esimerkki:
int Demo :: get_data() const { }> Tärkeitä kohtia
- Kun funktio on ilmoitettu const, sitä voidaan kutsua minkä tahansa tyyppiselle objektille, const-objektille sekä ei-const-objekteille.
- Aina kun objekti on ilmoitettu const, se on alustettava ilmoitushetkellä. objektin alustus deklaroinnin aikana on kuitenkin mahdollista vain konstruktorien avulla.
- Funktiosta tulee const, kun const-avainsanaa käytetään funktion määrittelyssä. Const-funktioiden ideana ei ole antaa niiden muokata objektia, johon niitä kutsutaan.
- On suositeltavaa tehdä mahdollisimman monta funktiota const, jotta vältytään vahingossa tapahtuvilta objektien muutoksilta.
Esimerkkejä Const-jäsenen toiminnoista
Esimerkki 1
Alla oleva C++-ohjelma osoittaa, että datajäseniä voidaan päivittää jäsenfunktiossa, joka ei ole vakio.
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;> }> |
>
>Lähtö
11>
Esimerkki 2
Alla oleva C++-ohjelma osoittaa, että tietoja ei voi päivittää vakiojäsenfunktiossa.
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;> }> |
>
>
Lähtö
./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; ^>
Esimerkki 3
Alla oleva C++-koodi osoittaa, kuinka määritellään vakiojäsenfunktioita luokan määritelmän ulkopuolella, ja esittelee vakiojäsenfunktion käyttöä yksityisen jäsenmuuttujan arvon asettamiseen ja hakemiseen.
C++
css läpinäkyvyyden siirtyminen
// 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;> }> |
>
>Lähtö
10>
Esimerkki 4
Alla oleva C++-ohjelma osoittaa, että const-funktioita voidaan kutsua ei-const-objekteilla.
Järjestä satunnaisesti sql:ssä
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;> }> |
>
>Lähtö
20>
Kun funktio on ilmoitettu const, sitä voidaan kutsua minkä tahansa tyyppiselle objektille. Ei-const-funktioita voivat kutsua vain ei-const-objektit.
Esimerkiksi seuraavassa ohjelmassa on kääntäjävirheitä.
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;> }> |
>
>
Lähtö
./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();>
Katsotaanpa toista esimerkkiä:
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);> }> |
>
>Lähtö
Hello world I'm Rancho Baba Inside display() Function>
Usein kysytyt kysymykset jäsenten toiminnoista
Q1. Voivatko luokan const-objektit kutsua ei-const-jäsenfunktioita?
Vastaus:
Ei, objektia, joka on ilmoitettu const:ksi, ei voida muokata, joten se voi kutsua vain const-jäsentoimintoja, koska nämä toiminnot varmistavat, että objektia ei muokata.
Q2. Voivatko luokan non-const-objektit kutsua const-jäsentä toimimaan?
Vastaus:
Kun funktio on ilmoitettu const, sitä voidaan kutsua minkä tahansa tyyppiselle objektille.