🌱 C++ Function Overloading - Nạp chồng hàm
Trong C++, hai hàm có thể có cùng tên nếu số lượng hoặc kiểu dữ liệu của đối số được truyền vào là khác nhau.
Những hàm này có cùng tên những các đối số khác nhau được gọi là Nạp chồng hàm - Overloaded Functions. Ví dụ,
// same name different arguments
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }
Ở đây chúng ta có 4 hàm overloaded, cả 4 hàm đều tên là test, và có số lượng cũng như kiểu dữ liệu của đối số khác nhau.
Còn yếu tố returnType khác nhau thực tế không có ảnh hưởng. Hai hàm cùng tên có cùng kiểu dữ liệu và số lượng đối số, thì compiler sẽ báo lỗi, cho dù kiểu trả về returnType có khác nhau. Ví dụ,
// Error code
int test(int a) { }
double test(int b){ }
🔻 Ví dụ 1. Function Overloading - Kiểu dữ liệu tham số khác nhau
#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;
return 0;
}
Run This Code
➥ Các bạn có thể bấm "Run This Code", kết quả hiển thị trên màn hình console như sau.
Absolute value of -5 = 5
Absolute value of 5.5 = 5.5
Hoạt dộng của Function Overloading |
Hàm absolute() ở đây là một hàm Overloaded, dựa trên loại tham số truyền vào trong lúc gọi hàm, hàm tương ứng sẽ được gọi.
🔻 Ví dụ 2. Function Overloading - 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);
return 0;
}
Run This Code
➥ Các bạn có thể bấm "Run This Code", kết quả hiển thị trên màn hình console như sau.
Integer number: 5
Float number: 5.5
Integer number: 5 and double number: 5.5
Trong chương trình trên, hàm display() được gọi 3 lần với số lượng và kiểu dữ liệu đối số khác nhau. Phụ thuộc vào số lượng và kiểu dữ liệu của tham số đầu vào, mà hàm display() tương ứng sẽ được gọi.
Function Overload với số lượng tham số khác nhau |
🔽 Lưu ý. Ngoài các hàm User-defined, một số hàm thư viện C++ cũng được triển khai Overloaded. Ví dụ hàm sqrt() có thể truyền tham số với các kiểu dữ liệu double, float, int, ...
>>>= Follow ngay =<<<
Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊