logo

Const-medlemsfunksjoner i C++

Konstante medlemsfunksjoner er de funksjonene som nektes tillatelse til å endre verdiene til datamedlemmene i klassen deres. For å gjøre en medlemsfunksjon konstant, legges nøkkelordet const til funksjonsprototypen og også til funksjonsdefinisjonsoverskriften.

I likhet med medlemsfunksjoner og medlemsfunksjonsargumenter, kan objektene til en klasse også erklæres som const. Et objekt erklært som const kan ikke endres og kan derfor kun påkalle const-medlemsfunksjoner, da disse funksjonene sikrer at objektet ikke endres. Et const-objekt kan opprettes ved å sette prefikset const-nøkkelordet til objektdeklarasjonen. Ethvert forsøk på å endre datamedlemmet til const-objekter resulterer i en kompileringstidsfeil.

Syntaks

Const member-funksjonen kan defineres på tre måter:



1. For funksjonserklæring innenfor en klasse.

 return_type function_name () const ;>

Eksempel:

int get_data() const;>

2. For funksjonsdefinisjon i klassedeklarasjonen.

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

Eksempel:

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

3. For funksjonsdefinisjon utenfor klassen.

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

Eksempel:

int Demo :: get_data() const { }>

Viktige poeng

  • Når en funksjon er erklært som const, kan den kalles på alle typer objekter, const-objekter så vel som ikke-const-objekter.
  • Når et objekt er deklarert som const, må det initialiseres på tidspunktet for deklarasjonen. Imidlertid er gjenstandsinitialisering mens deklarering kun mulig ved hjelp av konstruktører.
  • En funksjon blir const når nøkkelordet const brukes i funksjonens erklæring. Ideen med const-funksjoner er ikke å tillate dem å endre objektet de kalles på.
  • Det anbefales å øve seg på å lage så mange funksjoner som mulig slik at tilfeldige endringer på objekter unngås.

Eksempler på Const Member-funksjoner

Eksempel 1

C++-programmet nedenfor viser at datamedlemmer kan oppdateres i en medlemsfunksjon som ikke er konstant.

C++


les fra csv java



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

>

>

Produksjon

11>

Eksempel 2

C++-programmet nedenfor viser at data ikke kan oppdateres i en konstantmedlemsfunksjon.

C++




kjerne java intervju spørsmål
// 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;> }>

>

>

Produksjon

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

Eksempel 3

C++-koden nedenfor viser hvordan du definerer konstantmedlemsfunksjoner utenfor klassedefinisjonen og viser bruken av en konstantmedlemsfunksjon for å angi og hente verdien til en privat medlemsvariabel.

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

>

>

Produksjon

10>

Eksempel 4

C++-programmet nedenfor viser at const-funksjoner kan kalles opp av ikke-const-objekter.

C++


slå på java



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

>

>

Produksjon

20>

Når en funksjon er erklært som const, kan den kalles på alle typer objekter. Ikke-konst-funksjoner kan bare kalles av ikke-konst-objekter.

For eksempel har følgende program kompilatorfeil.

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

>

>

Produksjon

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

La oss se på et annet eksempel:

C++


java mvc



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

>

>

Produksjon

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

Vanlige spørsmål om Const Member Functions

Q1. Kan const-objekter i en klasse kalle ikke-konst-medlemsfunksjoner?

Svar:

Nei, et objekt erklært som const kan ikke endres og kan derfor kun påkalle const-medlemsfunksjoner, da disse funksjonene sikrer at objektet ikke endres.

Q2. Kan ikke-konst-objekter av en klasse kalle const-medlem fungere?

Svar:

Når en funksjon er erklært som const, kan den kalles på alle typer objekter.