ฟังก์ชั่นโอเวอร์โหลดเรียกอีกอย่างว่าวิธีการโอเวอร์โหลด ฟังก์ชันโอเวอร์โหลดเป็นคุณลักษณะที่มีให้โดยแนวคิดของพหุสัณฐานซึ่งใช้กันอย่างแพร่หลายในการเขียนโปรแกรมเชิงวัตถุ
เพื่อให้บรรลุฟังก์ชันโอเวอร์โหลด ฟังก์ชันควรเป็นไปตามเงื่อนไขเหล่านี้ -
-
ประเภทของฟังก์ชันที่ส่งคืนควรเหมือนกัน
-
ชื่อของฟังก์ชันควรเหมือนกัน
-
พารามิเตอร์อาจแตกต่างกันในประเภท แต่ควรเป็นตัวเลขเหมือนกัน
ตัวอย่าง
int display(int a); int display(float a); // both the functions can be overloaded int display(int a); float display(float b); //both the functions can’t be overloaded as the return type of one function is different from another
มาพูดถึงฟังก์ชันที่ไม่สามารถโอเวอร์โหลดได้ใน C++
-
ฟังก์ชันที่มีชื่อต่างกันและจำนวนพารามิเตอร์ต่างกัน
ตัวอย่าง
#include<iostream> using namespace std; int max_two(int a, int b) //contains two parameters{ if(a>b){ return a; } else{ return b; } } int max_three(int a, int b ,int c) //contains three parameters{ if (a>b && a>c){ return a; } else if(b>c){ return b; } else{ return c; } } int main(){ max_two(a,b); return 0; }
-
ฟังก์ชันชื่อเดียวกันแต่ประเภทการส่งคืนต่างกัน
ตัวอย่าง
#include<iostream> using namespace std; int max_two(int a, int b){ if(a>b){ return a; } else{ return b; } } float max_two(int a, int b){ if(a>b){ return a; } else{ return b; } } int main(){ max_two(a, b); return 0; }
-
ฟังก์ชันสมาชิกที่ตรงตามเงื่อนไขทั้งหมดของฟังก์ชันโอเวอร์โหลด แต่ถ้าเป็นฟังก์ชันสมาชิกแบบคงที่ จะไม่สามารถโอเวอร์โหลดได้
ตัวอย่าง
#include<iostream> class check{ static void test(int i) { } void test(int i) { } }; int main(){ check ch; return 0; }
-
หากฟังก์ชันสองฟังก์ชันเหมือนกันทุกประการแต่แตกต่างกันในอาร์กิวเมนต์เริ่มต้นเท่านั้น กล่าวคือ หนึ่งในฟังก์ชันมีอาร์กิวเมนต์เริ่มต้น จะถือว่าฟังก์ชันเดียวกันเหมือนกัน ซึ่งหมายความว่าไม่สามารถโอเวอร์โหลดได้ ดังนั้นคอมไพเลอร์จะส่งข้อผิดพลาดในการประกาศฟังก์ชันเดียวกันอีกครั้ง
ตัวอย่าง
#include<iostream> #include<stdio.h> using namespace std; int func_1 ( int a, int b){ return a*b; } int func_1 ( int a, int b = 40){ return a+b; } Int main(){ func_1(10,20); return 0; }