با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش ++C در خدمت شما دوستان هستیم . در بخش قبلی با انواع تابع در ++C آشنا شدید،
در این جلسه قصد داریم به آموزش سربارگذاری توابع در ++C و تابع با پارامتر پیش فرض در ++C بپردازیم.
سربارگذاری (Overloading) توابع این امکان را به ما می دهد تا بتوانیم توابع همنام اما با پارامتر های مختلف (نوع پارامتر) ایجاد کنیم.
توابع زیر نام های یکسانی دارند اما نوع پارامتر و نوع برگشتی آن ها متفاوت است:
1 2 3 4 | int test() { } int test(int a) { } float test(double a) { } int test(int a, double b) { } |
توجه داشته باشید که نوع مقدار برگشتی می تواند یا نمی تواند متفاوت باشد اما نوع پارامتر ها حتما باید متفاوت باشند:
کد زیر اشتباه است:
1 2 3 | // Error code int test(int a) { } double test(int b){ } |
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <iostream> using namespace std; void display(int); void display(float); void display(int, float); int main() { int a = 5; float b = 5.5; display(a); display(b); display(a, b); return 0; } void display(int var) { cout << "Integer number: " << var << endl; } void display(float var) { cout << "Float number: " << var << endl; } void display(int var1, float var2) { cout << "Integer number: " << var1; cout << " and float number:" << var2; } |
خروجی به شکل زیر می باشد:
1 2 3 | Integer number: 5 Float number: 5.5 Integer number: 5 and float number: 5.5 |
مثال ۲ :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> using namespace std; int absolute(int); float absolute(float); int main() { int a = -5; float b = 5.5; cout << "Absolute value of " << a << " = " << absolute(a) << endl; cout << "Absolute value of " << b << " = " << absolute(b); return 0; } int absolute(int var) { if (var < 0) var = -var; return var; } float absolute(float var){ if (var < 0.0) var = -var; return var; } |
خروجی به صورت زیر می باشد:
1 2 | Absolute value of -5 = 5 Absolute value of 5.5 = 5.5 |
در مثال بالا دو تابع ()absolute داریم که یکی از آن ها نوع int را به عنوان پارامتر می گیرد و دیگری نوع float را به عنوان پارامتر می گیرد.
وفتی این تابع با آرگومانی از نوع int فراخوانی شود، تابع زیر اجرا می شود:
1 2 3 4 5 | int absolute(int var) { if (var < 0) var = -var; return var; } |
وفتی این تابع با آرگومانی از نوع float فراخوانی شود، تابع زیر اجرا می شود:
1 2 3 4 5 | float absolute(float var){ if (var < 0.0) var = -var; return var; } |
در ++C شما می توانید پارامتر های یک تابع را به صورت پیش فرض مقدار دهی کنید.
با این کار هنگام فراخوانی تابع اگر تابع مقدار آن پارامتر ها را نگیرد، مقدار پیش فرض را جایگزین می کند.
این مقدار دهی پیش فرض در اعلام اولیه تابع (قبل از تابع main) صورت می گیرد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream> using namespace std; void display(char = '*', int = 1); int main() { cout << "No argument passed:\n"; display(); cout << "\nFirst argument passed:\n"; display('#'); cout << "\nBoth argument passed:\n"; display('$', 5); return 0; } void display(char c, int n) { for(int i = 1; i <= n; ++i) { cout << c; } cout << endl; } |
خروجی به شکل زیر می باشد:
1 2 3 4 5 6 7 8 | No argument passed: * First argument passed: # Both argument passed: $$$$$ |
در مثال بالا هنگامی که تابه display بدون آرگومان فراخوانی شده است، مقدار های پیش فرض جایگزین پارامتر شده اند.
۱٫
1 | void add(int a, int b = 3, int c, int d = 4); |
تابع بالا کامپایل نخواهد شد.
وقتی پارامتری را مقداردهی پیش فرض می کنید، تمام پارامتر های بعد از آن نیز باید مقدار پیش فرض بگیرند.
در اینجا پارامتر c باید مقدار پیش فرض بگیرد.
۲٫
1 | void add(int a, int b = 3, int c, int d); |
در اینجا هم مانند مثال قبلی پارامتر های c و d باید مقدار پیش فرض بگیرند.
جلسه سربارگذاری توابع در ++C نیز به پایان رسید.
mahan
خیلی ممنون از سایتتون مطالبش فوق العاده کاربردی و مفیده