русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Константні методи


Дата додавання: 2014-04-22; переглядів: 2443.


Константні методи відрізняються тим, що не міняють значень полів свого класу. Розглянемо це на прикладі:

class aclass

{private:

int alpha;

public:

void nonfunc() //неконстантний метод

{alpha=99;} //коректно

void confiunc() const //константний метод

{alpha=99;} //некоректно: не можна міняти значення поля

};

Звичайний метод nonfunc() може поміняти значення поля, а константний метод confunc() не може. Якщо константний метод спробує поміняти значення поля, компілятор видасть повідомлення про помилку.

Для того, щоб зробити функцію константною, необхідно вказати ключове слово const після прототипу функції, але до початку тіла функції. Якщо оголошення і визначення функції розділені, то модифікатор const необхідно вказати двічі – як при оголошенні функції, так і при її визначенні. Ті методи, які тільки зчитують дані з поля класу, є сенс робити константними, оскільки у них нема необхідності змінювати значення полів об’єктів класу.

Використання константних функцій допомагає компілятору виявляти помилки. Ще за їх допомогою можна створювати і використовувати константні об’єкти.

Проілюструємо це на прикладі, оголосивши константними деякі методи класу Distance програми 9.7. Одержимо програму 9.9

 

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class Distance

{private:

int feet;

float inches;

public:

 

Distance():feet(0),inches(0.0) //конструктор без аргументів

{ }

 

//конструктор з 2 aргументами

Distance(int ft,float in):feet(ft),inches(in)

{ }

 

void getdist()

{cout <<"\nВведіть число футів "; cin >>feet;

cout << "дюймів "; cin>>inches;

}

 

void showdist() const

{cout <<feet << "\' "<< inches <<"\''";}

 

Distance add_dist(const Distance)const; //Прототип

};

//dodavanna d2 i d3

Distance Distance::add_dist(const Distance d2)const

{

Distance temp;

//feet=0; //помилка не можна міняти поле

//d2.feet=0; //помилка не можна міняти поле

temp.inches=inches+d2.inches;

if(temp.inches>=12.0)

{temp.inches-=12.0;

temp.feet++;}

temp.feet+=feet+d2.feet;

return temp;

}

 

int main()

{

clrscr();

Distance dist1,dist3;

Distance dist2(11,6.25);

dist1.getdist();

dist3=dist1.add_dist(dist2);

cout <<"\ndist1=";dist1.showdist();

cout << "\ndist2=";dist2.showdist();

cout << "\ndist3=";dist3.showdist();

cout <<endl;

bioskey(0);

return 0;

}

Програма 9.9

В цьому прикладі обидві функції showdist() та add_dist() є константними. В тілі функції add_dist() перший із закоментованих операторів feet=0; демонструє, що компілятор видасть помилку при спробі зміни константною функцією полів об’єкта, з якого вона викликалася.

Константним можна оголосити і аргумент методу. В нашому прикладі це виглядає так:

Distance Distance::add_dist(const Distance d2)const

Функція не може поміняти значення цього аргумента, що і видно на прикладі другого закоментованого оператора d2.feet=0;

 


<== попередня лекція | наступна лекція ==>
Роздільне оголошення і визначення полів класу | Константні об’єкти


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн