class Nuqta
{
int x,y;
public:
Nuqta(int _x, int _y);
void Qiymat_Berish(int x0, int y0);
// константа функция-аъзо
void Qiymat_Olish(int xx, int yy) const;
};
Nuqta::Nuqta(int _x, int _y)
{ x=_x; y=_y;}
void Nuqta::Qiymat_Berish(int x0, int y0)
{ x=x0; y=y0;}
void Nuqta::Qiymat_Olish(int &xx, int &yy)const
{ xx=x; yy=y; }
Худди шундай, константа объектлар яратиш мумкин. Бунинг учун объект эълони олдига const модификатори ыщйилиши керак.
const Nuqta koord(3,6);
const калит сўзи компиляторга ушбу объектнинг ҳолати ўзгармаслиги кераклигини билдиради. Шу сабабли объект берилган-азъолари қийматини ўзгартирадиган функция–аъзосини чақириши учраса, компилятор хато ҳақида хабар беради. Бу қоидага константа функция-аъзоларни чақириш рриоя қилмайди, чунки ўз мазмунига кўра улар берилган–аъзоларни қиймsатини ўзгартира олмайди. Юқорида эълон қилинган Nuqta синфини константа объект ишлатишига мисол.
// Nuqta синф эълони ва аниқланиши
int main()
{
Nuqta nuqta1(3,7);
const Nuqta nuqta2(8,10);//Константа объект
int a,b;
nuqta1.Qiymat_Olish (a,b);
nuqta2. Qiymat_Berish(2,3);// Хато
nuqta2. Qiymat_Olish(a,b); // Тўғри
return 0;
}
Константа функция–аъзоларнинг берилганлар–аъзолар билан ишлаш билан боғлиқ чекловларни “айланиб ўтиш” учун mutable калит сўзи аниқланган. Бу калит сўз синфнинг қайси берилган-аъзоси константа функция-аъзолар томонидан ўзгартирилиши мумкин эканлигини кўрсатади. Статик ва константа берилганлар-аъзоларига mutable калит сўзини ишлатиш мумкин эмас, у берилганлар турининг модификатори сифатида ишлатилади.
Мисол.
#include
class Sinf
{
Do'stlaringiz bilan baham: |