const ها در کلاس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

const ها در کلاس

+1 امتیاز
void print() const;

این تابع که const هستش باعث تغیر نکردن چیه؟؟ من مفهوم const را نمیفهمم.

وقتی عضو داده خصوصی const هست تابع هم باید const باشه؟ پس سازنده چی؟ اون که نمیتونه const باشه..

وقتی یک شی از کلاس را const تعریف میکنیم دقیقا چی const میشه؟

سوال شده فروردین 12, 1393  بوسیله ی programmer (امتیاز 139)   9 19 32
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

اگر تابع عضو کلاس 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
}

 

پاسخ داده شده فروردین 12, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد فروردین 12, 1393 بوسیله ی programmer
اگه const,nباشه یعنی قابل تغییر نیس چطوری با سازنده میتونیم تغیرش بدیم؟
برای مقدار دادن به عضو const کلاس باید از constructor initializer استفاده کنید.
این لینک رو بببینید http://goo.gl/xsfKOS
اینو میدونم ولی خب وقتی داریم مقدار میدیم یعنی داریم تغییرش میدیم دیگه؟! پس با const بودنش مغایرت داره
تعریف const : متغیری که const باشه  مقدار 'اولیه' که بهش دادیم قابل تغییر نیست .
ما از سازنده برای دادن مقدار اولیه استفاده می کنیم ولی در ادامه بعد از ساخته شدن شی از کلاس اون متغیر 'معمولا' قابل تغییر نیست  
پس نمیشه گفت داشتن سازنده با تعریف const متغایره چون برای مقدار اولیه دادن استفاده میشه .
...