logo

Const locekļa funkcijas programmā C++

Pastāvīgo dalībnieku funkcijas ir tās funkcijas, kurām ir liegta atļauja mainīt savas klases datu dalībnieku vērtības. Lai locekļa funkciju padarītu nemainīgu, funkcijas prototipam un arī funkcijas definīcijas galvenei tiek pievienots atslēgvārds const.

Tāpat kā biedru funkcijas un dalībnieku funkciju argumentus, klases objektus var arī deklarēt kā const. Objektu, kas deklarēts kā const, nevar modificēt, un tādējādi tas var izsaukt tikai const dalībnieku funkcijas, jo šīs funkcijas nodrošina, ka objekts netiek mainīts. Const objektu var izveidot, objekta deklarācijai pievienojot atslēgvārdu const. Jebkurš mēģinājums mainīt const objektu datu dalībnieku rada kompilēšanas laika kļūdu.



Sintakse

Dalībnieka funkciju const var definēt trīs veidos:

1. Funkciju deklarācijai klasē.

 return_type function_name () const ;>

Piemērs:

int get_data() const;>

2. Funkciju definīcijai klases deklarācijā.

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

Piemērs:



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

3. Funkciju definēšanai ārpus klases.

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

Piemērs:

int Demo :: get_data() const { }>

Svarīgi punkti

  • Kad funkcija ir deklarēta kā const, to var izsaukt jebkura veida objektos, const objektos, kā arī objektos, kas nav const.
  • Ikreiz, kad objekts tiek deklarēts kā const, tas ir jāinicializē deklarēšanas laikā. taču objekta inicializācija deklarēšanas laikā iespējama tikai ar konstruktoru palīdzību.
  • Funkcija kļūst par const, ja funkcijas deklarācijā tiek izmantots atslēgvārds const. Const funkciju ideja ir neļaut tām modificēt objektu, uz kuru tās tiek izsauktas.
  • Ieteicams praktizēt pēc iespējas vairāk funkciju const, lai izvairītos no nejaušām objektu izmaiņām.

Const biedru funkciju piemēri

1. piemērs

Tālāk sniegtā C++ programma parāda, ka datu dalībniekus var atjaunināt dalībnieka funkcijā, kas nav nemainīga.

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

>

>

Izvade

11>

2. piemērs

Tālāk redzamā C++ programma parāda, ka datus nevar atjaunināt pastāvīgā dalībnieka funkcijā.

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

>

java objektu vienlīdzība
>

Izvade

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

3. piemērs

Tālāk sniegtais C++ kods parāda, kā definēt konstanta locekļa funkcijas ārpus klases definīcijas, un parāda konstanta dalībnieka funkcijas izmantošanu, lai iestatītu un izgūtu privātā dalībnieka mainīgā vērtību.

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

>

>

Izvade

10>

4. piemērs

Zemāk esošā C++ programma parāda, ka const funkcijas var izsaukt objekti, kas nav 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;> }>

>

>

Izvade

20>

Kad funkcija ir deklarēta kā const, to var izsaukt jebkura veida objektā. Funkcijas, kas nav const, var izsaukt tikai objekti, kas nav const.

Piemēram, tālāk norādītajā programmā ir kompilatora kļūdas.

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

>

>

Izvade

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

Apskatīsim citu piemēru:

C++




unix vs Windows

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

>

>

Izvade

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

Bieži uzdotie jautājumi par Const biedru funkcijām

Q1. Vai klases const objekti var izsaukt funkcijas, kas nav const dalībnieka funkcijas?

Atbilde:

Nē, objektu, kas deklarēts kā const, nevar modificēt, un tādējādi tas var izsaukt tikai const dalībnieku funkcijas, jo šīs funkcijas nodrošina, ka objekts netiek mainīts.

Q2. Vai klases objekti, kas nav const, var izsaukt const dalībnieka funkciju?

Atbilde:

Kad funkcija ir deklarēta kā const, to var izsaukt jebkura veida objektā.