پارامترهای اختیاری

پارامترهای اختیاری همانگونه که از اسمشان پیداست اختیاری هستند و می توان به آنها آرگومان ارسال کرد یا نه. این پارامترها دارای مقادیر پیشفرضی هستند.اگر به اینگونه پارامترها آرگومانی ارسال نشود از مقادیر پیشفرض استفاده می کنند. به مثال زیر توجه کنید :

   1: #include <iostream>
   2: #include <string>
   3: using namespace std;
   4: 
   5: void PrintMessage(string message = "Welcome to Visual C++ Tutorials!")
   6: {
   7:     cout << message << endl;
   8: }
   9: 
  10: int main()
  11: {
  12:     PrintMessage();
  13: 
  14:     PrintMessage("Learn C++ Today!");
  15: }
Welcome to Visual C++ Tutorials! 
Learn C++ Today!

متد ()PrintMessage (خطوط 8-5) یک پارامتر اختیاری دارد. برای تعریف یک پارامتر اختیاری می توان به آسانی و با استفاده از علامت = یک مقدار را به یک پارامتر اختصاص داد (مثال بالا خط 5). دو بار متد را فراخوانی می کنیم. در اولین فراخوانی (خط 12) ما آرگومانی به متد ارسال نمی کنیم بنابراین متد از مقدار پیشفرض (Welcome to Visual C++ Tutorials!) استفاده می کند. در دومین فراخوانی(خط 14) یک پیغام (آرگومان) به متد ارسال می کنیم که جایگزین مقدار پیشفرض پارامتر می شود. اگر از چندین پارامتر در متد استفاده می کنید همه پارامترهای اختیاری باید در آخر بقیه پارامترها ذکر شوند. به مثالهای زیر توجه کنید.

void SomeMethod(int opt1 = 10, int opt2 = 20, int req1, int req2) //ERROR

void SomeMethod(int req1, int opt1 = 10, int req2, int opt2 = 20) //ERROR

void SomeMethod(int req1, int req2, int opt1 = 10, int opt2 = 20) //Correct

وقتی متدهای با چندین پارامتر اختیاری فراخوانی می شوند باید به پارامترهایی که از لحاظ مکانی در آخر بقیه پارامترها نیستند مقدار اختصاص داد. به یاد داشته باشید که نمی توان برای نادیده گرفتن یک پارامتر به صورت زیر عمل کرد :

void SomeMethod(int required1, int optional1 = 10, int optional2 = 20)
{
   //Some Code
}

// ... Code omitted for demonstration

SomeMethod(10, , 100); //Error