PDA

View Full Version : کاربرد const در تعریف توابع



mamad64bit
شنبه 02 آذر 1387, 10:42 صبح
این دو تابع روبرو با هم چه فرقی میکند منظورم تو ثابت const ه

double circle::getRadious() const { return r;}
double circle:getRadious() {return r;}
مرسی

emad_67
شنبه 02 آذر 1387, 11:20 صبح
وقتی تابعی رو const تعریف کنی یعنی این تابع نمیتونه عضو های کلاس رو تغییر بده. دقت کن که حتی اگر توسط تابع const بیای تابع غیر const ئی رو از همون کلاس فراخوانی کنی باز هم ارور میده کامپایلر.

mamad64bit
شنبه 02 آذر 1387, 12:56 عصر
وقتی تابعی رو const تعریف کنی یعنی این تابع نمیتونه عضو های کلاس رو تغییر بده.
مرسی از پاسختون میشه یکم بیشتر توضیح بدید

emad_67
شنبه 02 آذر 1387, 15:32 عصر
مثلا اینو بین:


#include "stdafx.h"
#include<iostream>
using namespace std;
class test
{
public:
void print() const
{
num=10;
}
void change()
{
}
private:
int num;
};

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

من یه کلاس تعریف کردم که توی یه متد از نوع const و یه متد هم از نوع غیر const دارم. توی تابع const اومدم مقدار عضو کلاس رو تغییر دادم که این اشتباهه. در واقع وقتی تابع رو const تعریف میکنی این تابع نمیتونه هیچ مقداری از عضو های کلاس رو تغییر بده و فقط به درد return کردن مقداری میخوره.
حالا تابع print رو به این شکل ادیت کن:


void print() const
{
change();
}

باز هم اگه کامپایل کنی ارور میده. به خاطر اینه که تابع const نمیتونه حتی یک تابع غیر const رو هم فراخوانی کنه. میبینی که من حتی توی تابع change هیچ چیزی که بیاد عضو خصوصی رو تغییر بده هم ننوشتم ولی ارور داریم.

mamad64bit
شنبه 02 آذر 1387, 17:00 عصر
والا من این کدو تو turbo ++c کامپایل کردم error نداد



#include<iostream.h>
class x
{
public:
void print () const
{
// num=12;
change();
}
void change(){}
private:
int num;
};
void main()
{
x x1;
x1.print();

}

emad_67
شنبه 02 آذر 1387, 20:04 عصر
turbu c++ خوب مخش تعطیله حتما. :دی
کدی رو که دادم در vs 2005 و vs 2000 ازش ارور میگیره. توصیه می کنم از visual studio استفاده کنی چون خیلی به نظرم بهتره البته اگه از turbo c++ تحت داس استفاده میکنی شاید یه مقدار برای این مفهوم زیادی قدیمی باشه.

Salar Ashgi
شنبه 02 آذر 1387, 20:14 عصر
سلام ، در مبحث شی گرایی و طراحی کلاسها اصولا توابعی که هیچ شی ای را تغییر

نمی دهند ، بهتر است const تعریف کنیم ، چراکه اینکار کارایی برنامه را بالا خواهد برد !!

نکات توابع (عضو کلاس) ثابت :

1 - یک تابع عضو ، ثابت نمی تواند تابع عضو ، غیر ثابت را فراخوانی کند !!!

2 - یک تابع عضو ، ثابت نمی تواند شی غیر ثابت را تغییر دهد !!!

3- یک شی ثابت نیز نمی تواند تابع عضو ، غیر ثابت را فراخوانی کند !!!

موفق و پیروز باشید !!!

mamad64bit
شنبه 02 آذر 1387, 20:32 عصر
turbu c++ خوب مخش تعطیله حتما. :دی
کدی رو که دادم در vs 2005 و vs 2000 ازش ارور میگیره. توصیه می کنم از visual studio استفاده کنی چون خیلی به نظرم بهتره البته اگه از turbo c++ تحت داس استفاده میکنی شاید یه مقدار برای این مفهوم زیادی قدیمی باشه.
بله vs که خیلی بهتر و کاملتره میخوام درس برنامه سازی پیشرفته رو پاس کنم فعل از برنامه توربو
c++ win 4.5
استفاده میکنم