Nạp chồng hàm (function overloading) là gì?

Đây là bài 25/43 bài của series môn học Nhập môn lập trình

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
function overloading using different types of parameters

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
function overloading using different parameter number

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é!

Mời bạn đánh giá bài viết
Bài trước và bài sau trong môn học<< Truyền tham trị và truyền tham chiếu cho hàm trong C++Biến toàn cục và biến cục bộ trong chương trình >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.