ฟังก์ชั่นโอเวอร์โหลดเรียกอีกอย่างว่าวิธีการโอเวอร์โหลด ฟังก์ชันโอเวอร์โหลดเป็นคุณลักษณะที่มีให้โดยแนวคิดของพหุสัณฐานซึ่งใช้กันอย่างแพร่หลายในการเขียนโปรแกรมเชิงวัตถุ
เพื่อให้บรรลุฟังก์ชันโอเวอร์โหลด ฟังก์ชันควรเป็นไปตามเงื่อนไขเหล่านี้ -
-
ประเภทของฟังก์ชันที่ส่งคืนควรเหมือนกัน
-
ชื่อของฟังก์ชันควรเหมือนกัน
-
พารามิเตอร์อาจแตกต่างกันในประเภท แต่ควรเป็นตัวเลขเหมือนกัน
ตัวอย่าง
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;
}