logo

Функції-члени Const у C++

Постійні функції-члени — це функції, яким заборонено змінювати значення членів даних свого класу. Щоб зробити функцію-член постійною, ключове слово const додається до прототипу функції, а також до заголовка визначення функції.

Подібно до функцій-членів і аргументів функцій-членів, об’єкти класу також можуть бути оголошені як const. Об’єкт, оголошений як const, не може бути змінений і, отже, може викликати лише функції-члени const, оскільки ці функції гарантують відсутність змін у об’єкті. Об’єкт const можна створити, додавши префікс ключового слова const до оголошення об’єкта. Будь-яка спроба змінити член даних об’єктів const призводить до помилки під час компіляції.



Синтаксис

Функцію-член const можна визначити трьома способами:

1. Для оголошення функції в класі.

 return_type function_name () const ;>

приклад:

int get_data() const;>

2. Для визначення функції в декларації класу.

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

приклад:



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

3. Для визначення функції поза класом.

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

приклад:

int Demo :: get_data() const { }>

Важливі моменти

  • Коли функція оголошена як const, її можна викликати для будь-якого типу об’єкта, як const, так і неconst об’єктів.
  • Щоразу, коли об’єкт оголошується як const, його потрібно ініціалізувати під час оголошення. однак ініціалізація об'єкта при оголошенні можлива лише за допомогою конструкторів.
  • Функція стає константою, коли в оголошенні функції використовується ключове слово const. Ідея постійних функцій полягає в тому, щоб не дозволяти їм змінювати об’єкт, для якого вони викликаються.
  • Рекомендується робити якомога більше функцій const, щоб уникнути випадкових змін об’єктів.

Приклади функцій-членів Const

Приклад 1

Наведена нижче програма C++ демонструє, що елементи даних можна оновлювати у функції-члені, яка не є константою.

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

>

>

Вихід

11>

Приклад 2

Наведена нижче програма C++ демонструє, що дані не можна оновити у функції-члені Constant.

оператори if else java

C++




сканер сканування java
// 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;> }>

>

>

Вихід

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

Наведений нижче код на C++ демонструє, як визначити постійні функції-члени поза визначенням класу, і демонструє використання постійної функції-члена для встановлення та отримання значення приватної змінної-члена.

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

>

>

Вихід

10>

Приклад 4

Наведена нижче програма C++ демонструє, що постійні функції можуть викликатися неконстантними об’єктами.

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

>

>

Вихід

20>

Коли функція оголошена як const, її можна викликати для будь-якого типу об’єкта. Неконстантні функції можуть викликатися лише неконстантними об’єктами.

Наприклад, наступна програма має помилки компілятора.

CSS вирівнювання зображень

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

>

>

Вихід

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

Давайте розглянемо інший приклад:

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

>

>

Вихід

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

Поширені запитання щодо функцій-членів Const

Q1. Чи можуть постійні об’єкти класу викликати непостійні функції-члени?

відповідь:

js settimeout

Ні, об’єкт, оголошений як const, не може бути змінений і, отже, може викликати лише функції-члени const, оскільки ці функції гарантують, що об’єкт не змінюватиметься.

Q2. Чи можуть неконстантні об’єкти класу викликати константну функцію-член?

відповідь:

Коли функція оголошена як const, її можна викликати для будь-якого типу об’єкта.