در مورد اشياء و توابع const :
اگه بخوايم يه شيئي رو به صورت const تعريف کنيم ، بايد قبل از نام کلاس کلمه کليدي const رو بذاريم . مثلا مي خوايم از کلاس Polynomial يه شيء const به نام poly بگيريم . مي نويسيم :
[html]
const Polynomial poly;
[/html]
يه نکته :
اگه بخواين از يکي از انواع داده اي اصلي ++C مثل int متغير const تعريف کنين ، بايد تو همون خط ، يعني تعريف متغير مقدار دهي اوليه کنين . در غير اين صورت Compile Error دريافت مي کنين با اين مضمون :
const object must be initialized if not extern
ولي براي دستور بالايي ما که يک نوع داده اصلي نيست ، بلکه يه کلاسه ، ايراد نمي گيره و اجازه مي ده برنامه اجرا بشه . ولي با اين همه يه warning ميده . اون هم در يه شرط . چه شرطي ؟ الان ميگم :
گفتيم که Constructor يه کلاس هنگامي فراخواني ميشه که شيئي از اون کلاس ايجاد بشه . خوب حالا ما مي تونيم هرکاري که دلمون مي خواد تو اون constructor انجام بديم . مثلا ما اين جا مي تونيم به داده هاي عضو کلاس مقدار اوليه بديم تا هنگامي که شيئي ايجاد مي شه همه داده هاي عضو مقدار اوليه داشته باشن . در اين صورت وقتي شيء به صورت const تعريف ميشه ، ديگه warning هم نميده . چون ديگه به محض تعريف شيء ، داده ها مقدار اوليه شونو توسط سازنده گرفتن . وقتي Constructor مون خالي باشه ، هنگام تعريف يک شيء از اون کلاس به صورت const ، پيغام هشدار يا warning دريافت مي کنيم .
براي تعريف يه تابع عضو به صورت const هم بايد کلمه const رو بعد از پرانتز بسته ليست پارامترها قرار بديم .
چند نکته در مورد توابع عضو const و اشياء const
1- اشياء const نمي تونن هيچ تابع عضوي رو احضار کنن ، مگر اينکه خود تابع عضو هم const باشه .
2- توابع عضو اعلان شده به صورت const نمي تونن داده هاي عضو يک شيء رو تغيير بدن .
3- خود تابع عضوي که const هست نمي تونه تابع عضو غير const همون کلاس رو احضار کنه .
4- سازنده ها و نابودکننده کلاس ها همواره شيء رو تغيير مي دن . بنابراين شيء شما چه const باشه و چه غير const ، اونا مجاز هستن عمليات خود رو روي شيء انجام بدن .
5- نمي تونيم سازنده ها و نابود کننده يک کلاس رو به صورت const تعريف کنيم .
6- يه شيء غير const مي تونه تابع عضو const همون کلاس رو احضار کنه .
فکر کنم ديگه تموم شد . اگه نکته اي موند بگين . :20: