====== آرگومان های پیشفرض ======
===== تعریف =====
در $C++$ میتوان برای یک پارامتر مقدار پیشفرضی را تعیین کرد که هنگام فراخوانی در صورت ندادن آرگومان مربوط به آن پارامتر با مقدار پیشفرض مقدار بگیرد. این مقدار پیشفرض برای ساده کردن فراخوانی توابع پیچیده و بعضی مواقع به عنوان یک شکل میانبر [[سربارگذاری_نام_توابع|سربارگذاری]] تابع استفاده میشوند.
===== نحوه استفاده =====
مقدار پیشفرض مانند مقدار دهی اولیه به یک متغیر صورت میپذیرد مثال زیر را در نظر بگیرید
void myFunc(int num=1,char ch='A')
{
.
.
.
}
* **نکته اول :** اگر پارامتری مقدار پیشفرض داشته باشد **تمام پارامتر های سمت راست آن** نیز باید مقدار پیش فرض داشته باشند. بنابراین در مثال بالا نمیشود که $num$ مقدار پیشفرض داشته باشد ولی $ch$ نداشته باشد.
تابع بالا را به صورت های زیر میتوان فراخوانی کرد:
myFunc(2,'B'); // num=2 & ch='B'
myFunc(2); // num=2 & ch='A'
myFunc(); // num=1 & ch='A'
* **نکته دوم :** هنگام صدا کردن تابع ابتدا پارامتر هایی که مقدار پیشفرض ندارند داده میشوند سپس میرسیم به ابتدای پارامتر هایی که مقدار پیشفرض دارند سپس تا جایی دلخواه از چپ میتوانیم آرگومان مورد نظر را برای پارامتر های داری مقدار پیشفرض بفرستیم و دیگر ادامه ندهیم و در اینصورت پارامتر های باقی مانده با مقدار پیشفرض مقداردهی میشوند.
مثال زیر را در نظر بگیرید در آن نکته بالا در قالب مثال نشان داده شده است:
void func(T1 P1,T2 P2,T3 P3=D3,T4 P4=D4,T5 P5=D5){}
...
func(ARG1,ARG2); // P1=ARG1 & P2=ARG2 & P3=D3 & P4=D4 & P5=D5
func(ARG1,ARG2,ARG3); // P1=ARG1 & P2=ARG2 & P3=ARG3 & P4=D4 & P5=D5
func(ARG1,ARG2,ARG3,ARG4); // P1=ARG1 & P2=ARG2 & P3=ARG3 & P4=ARG4 & P5=D5
func(ARG1,ARG2,ARG3,ARG4,ARG5); // P1=ARG1 & P2=ARG2 & P3=ARG3 & P4=ARG4 & P5=ARG5
===== ابهام =====
هنگامی که از مقادیر پیشفرض و ویژگی سربارگذاری باهم استفاده میکنیم در بعضی اوقات به هنگام فراخوانی برای کامپایلر ابهام به وجود می آید که در بخش [[سربارگذاری_نام_توابع|سربارگذاری]] به آن پرداخته ایم.