اگر تابع عضو کلاس const باشه یعنی این که هیچ کدوم از اعضای کلاس رو عوض نمی کنه و اگر ناخواسته بخواهید عضو کلاس رو عوض کنین کامپایلر ارور میده
از داخل یک تابع const نمیشه توابع غیر const عضو کلاس رو صدا زد (حتی اگر هیچ کدوم از اعضای کلاس رو عوض نکنن )
وقتی که یک شی از کلاس const تعریف میشه 2 تا اتفاق میفته
1_ اجازه عوض کردن مستقیم اعضای public کلاس بوسیله اون شی رو ندارید.
2_فقط می تونین توابع const داخل کلاس رو صدا بزنین .
سازنده نمی تونه const باشه چون از سازنده برای مقدار دادن به اعضای کلاس استفاده میشه .
تمام مواردی که گفتم رو می تونید داخل مثال زیر ببینید.
#include <iostream>
class A
{
public:
A(){n=0;}
A(int)const{} //error constructor can not be const
void f(){}
void g()const
{
n=4;//error changing class member from const member function
f();//error calling non const member function from const member function
}
int n;
};
int main()
{
const A a;
a.f();//error calling non const function from const object
a.g();//ok
a.n=23;//error changing class member from const object
}