1. Nạp chồng hàm (function overloading) là gì?
Trong C++, 2 hàm có thể trùng tên với nhau nếu danh sách tham số của hàm là khác nhau. Có thể khác nhau về số lượng tham số hoặc kiểu dữ liệu của tham số.
Những hàm có cùng tên nhưng khác danh sách tham số thì gọi là nạp chồng hàm.
Ví dụ:
// các hàm trùng tên nhưng khác danh sách tham số
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }
Lưu ý: Kiểu trả về của các hàm nạp chồng có thể giống hoặc khác nhau cũng được. Nhưng danh sách tham số phải là khác nhau.
Ví dụ bên dưới sẽ là khai báo hàm nạp chồng lỗi vì tham số giống nhau (mặc dù hàm khác kiểu trả về).
// Error code
int test(int a) { }
double test(int b){ }
2. Một số ví dụ về nạp chồng hàm
Chương trình C++ minh họa nạp chồng hàm với kiểu dữ liệu của tham số khác nhau
// Program to compute absolute value
// Works for both int and float
#include <iostream>
using namespace std;
// function with float type parameter
float absolute(float var){
if (var < 0.0)
var = -var;
return var;
}
// function with int type parameter
int absolute(int var) {
if (var < 0)
var = -var;
return var;
}
int main() {
// call function with int type parameter
cout << "Absolute value of -5 = " << absolute(-5) << endl;
// call function with float type parameter
cout << "Absolute value of -5.5 = " << absolute(-5.5f) << endl;
system("pause");
}
Kết quả
Absolute value of -5 = 5
Absolute value of -5.5 = 5.5
Chương trình C++ minh họa nạp chồng hàm với số lượng tham số khác nhau
#include <iostream>
using namespace std;
// function with 2 parameters
void display(int var1, double var2) {
cout << "Integer number: " << var1;
cout << " and double number: " << var2 << endl;
}
// function with double type single parameter
void display(double var) {
cout << "Double number: " << var << endl;
}
// function with int type single parameter
void display(int var) {
cout << "Integer number: " << var << endl;
}
int main() {
int a = 5;
double b = 5.5;
// call function with int type parameter
display(a);
// call function with double type parameter
display(b);
// call function with 2 parameters
display(a, b);
system("pause");
}
Kết quả
Integer number: 5
Float number: 5.5
Integer number: 5 and double number: 5.5
Các bạn không nên sử dụng quá nhiều nạp chồng hàm để tránh bị nhầm lẫn chức năng giữa các hàm nhé!