اگر با کلمه کلیدی const در زبان C آشنا باشید، احتمالا شنیدن توابع const کمی برایتان عجیب خواهد بود. چراکه یک تابع مثل متغیر قرار نیست در حین برنامه تغییر کند. در ادامه به این میپردازیم که const function چیست و چه کاربردی دارد؟
وقتی که یک متغیر یا شی را به صورت const تعریف میکنیم، در برنامه اجازه نداریم که اشارهگر یا رفرنسی به آن متغیر تعریف کنیم که const نباشد. دلیلش هم واضح است. قرار نیست مقادیر آن محل از حافظه حتا از طریق رفرنس یا اشارهگر دیگری تغییر کنند.
وقتی که صحیت از زبان شیگرای ++C میشود، به دلیل اینکه objectها دارای متد -method- هستند، کار پیچیدهتر میشود. فرض کنید در بدنهی متد کلاسی، یکی از متغیرهای کلاس تغییر کند. اگر ما شیای از این کلاس تعریف کرده باشیم که const باشد، در صورت فراخوانی این متد، این تغییر در تضاد با const بودنش است. به همین دلیل نباید یک شی const این متد را اجرا کند. از طرفی اگر متدی باشد که هیچ تغییری در اعضای متغیر کلاس نمیدهد، فراخوانی آن توسط const object مشکلی ایجاد نمیکند.
پس تا اینجا متوجه شدیم که متدهای کلاس ۲ گروه هستند:
گروهی که تغییری بر روی متغیرهای کلاس ایجاد نمیکنند و در نتیجه فراخوانی آنها از طریق شی const و غیر const موردی ندارد. این گروه از متدهای کلاس را باید برای کامپایلر مشخص کنیم. تا اگر در برنامه const objectای این نوع متد را فراخوانی کرد کامپایلر خطایی ندهد. به این متدها const function میگویند و طریقه تعریفشان هم به این صورت است که در جلوی پرانتز آرگومانهای ورودی کلمه const را قرار دهیم. مثلا:
int my_class::my_method() const
{
return value1 * value2;
}
گروه بعدی اما دادههای کلاس را تغییر میدهند و در نتیجه نباید از طریق const objectها فراخوانی شوند. در حالیکه هیج ایرادی ندارد که از طریق objectهای غیر const فراخوانی شوند.