🌱 C++ Functions - Tổng quan về Hàm trong C++
Trường hợp những đoạn code được gọi đi gọi lại ở nhiều vị trí, các ngôn ngữ lập trình cung cấp khái niệm Function - Hàm, dùng để tổng hợp các đoạn code thực thi một nhiệm vụ cụ thể nào đó.
👉 Khái niệm và công dụng của Function
Function - Hàm là một khối lệnh dùng để thực thi những nhiệm vụ cụ thể.
Việc tổ chức và sử dụng function có mục đích giúp chương trình dễ hiểu, có khả năng tái sử dụng, và giảm kích thước của code.
➤ C++ có 2 loại function:
- Standard Library Functions: Các hàm thư viện chuẩn được định nghĩa bởi C++
- User-defined Functions: Được định nghĩa bởi user/developer.
Trong bài viết này sẽ tập trung vào User-defined Functions.
👉 User-defined Functions
C++ cho phép người lập trình định nghĩa ra các hàm. Về cơ bản, function là tập hợp các câu lệnh, mục tiêu thường dùng để làm một chức năng cụ thể, và mỗi function có một tên gọi riêng (identifier).
Khi hàm được sử dụng (gọi hàm - call function), tất cả các câu lệnh trong function sẽ được thực thi.
🔻 Khai báo hàm - Function Declaration
returnType functionName(parameter1, parameter2,...)
{
// function body
}
Ví dụ khai báo một hàm,
// function declaration
void greet()
{
cout << "Hello World";
}
Ở đây tên hàm là greet, kiểu trả về là void, không có tham số truyền vào.
🔻 Calling a Function - Gọi hàm
Trong chương trình, việc sử dụng hàm gọi là Call Function - Gọi hàm, ví dụ, để gọi hàm greet ở trên,
int main()
{
// calling a function
greet();
}
Hoạt động của Function trong C++ |
Việc gọi hàm tức là chương trình sẽ nhảy đến địa chỉ của hàm greet() trên bộ nhớ. Để hiểu quá trình function call diễn ra như thế nào, các bạn đọc thêm bài viết sau.
🔻 Ví dụ sử dụng function
#include <iostream>
using namespace std;
// declaring a function
void greet()
{
cout << "Hello World!";
}
int main()
{
// calling the function
greet();
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.
Hello World!
👉 Function Parameters and Return Value
🔻 Function Parameters
Như đã nói ở trên, một function có thể được khai báo bằng các tham số (parameter), hoặc gọi là đối số (argument). Tham số là một giá trị được truyền vào hàm khi khai báo và sử dụng. Ví dụ,
void printNum(int num)
{
cout << num;
}
Ở đây, num là tham số của hàm với kiểu dữ liệu int. Khi gọi hàm, chúng ta có thể truyền một giá trị int vào hàm.
int main()
{
int n = 7;
// calling the function
// n is passed to the function as argument
printNum(n);
return 0;
}
➥ Các đối số được truyền khi gọi hàm nên khớp kiểu dữ liệu với các tham số tương ứng được định nghĩa trong phần khai báo hàm. Nếu cố gắng truyền một giá trị khác kiểu dữ liệu của tham số, giá trị đó sẽ bị ép kiểu trước khi truyền vào.
🔻 Function Return Value
Trong các ví dụ trên, chúng ta đặt kiểu dữ liệu trả về của hàm là void, điều này có nghĩa là hàm không trả về bất kỳ giá trị nào.
Khi khai báo hàm, chúng ta có thể trả về một giá trị từ hàm, bằng cách khai báo một kiểu dữ liệu ở phần returnType. Sau đó, bên trong hàm, câu lệnh return dùng để trả về một giá trị tương ứng. Ví dụ,
int add(int a, int b)
{
return (a + b);
}
➥ Ở đây hàm add có kiểu dữ liệu trả về là int, việc dùng câu lệnh return (a + b); sẽ trả về một giá trị bằng a+b.
Câu lệnh return cũng thông báo việc thoát khỏi hàm. Các câu lệnh sau lệnh return sẽ không được thực thi.
🔻 Ví dụ sử dụng Return Type
#include <iostream>
using namespace std;
// declaring a function
int add(int a, int b)
{
return (a + b);
}
int main()
{
int sum;
// calling the function and storing
// the returned value in sum
sum = add(100, 78);
cout << "100 + 78 = " << sum << 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.
100 + 78 = 178
Việc trả về giá trị từ một hàm nên đi kèm với việc gán vào một biến (ở đây là biến sum), để có thể sử dụng.
Hoạt động của hàm với câu lệnh return |
👉 Function Prototype - Nguyên mẫu hàm
Trong C/C++, việc khai báo hàm cần được thực hiện trước quá trình gọi hàm - function call. Một số trường hợp, chúng ta cần định nghĩa hàm (definition - hay triển khai hàm) sau khi gọi hàm, hoặc cần gọi hàm định nghĩa ở một file source khác, chúng ta cần dùng một định nghĩa, đó là Function Prototype. Ví dụ,
// function prototype
void add(int, int);
int main()
{
// calling the function before declaration.
add(5, 3);
return 0;
}
// function definition
void add(int a, int b)
{
cout << (a + b);
}
Trong đoạn code trên, nguyên mẫu hàm là,
void add(int, int);
Nguyên mẫu hàm - Function protoype, cung cấp thông tin về tên hàm, kiểu trả về, kiểu dữ liệu của các tham số. Mục đích là để khi compiler thực hiện biên dịch, nó sẽ hiểu là hàm add này sẽ được định nghĩa (ở một vị trí nào đó trong chương trình), và khi biên dịch đến hàm main, compiler sẽ không báo lỗi khi gặp câu lệnh add(5, 3);.
Trong C/C++, thông thường chúng ta dùng nguyên mẫu hàm:
- Trong nội bộ file, nguyên mẫu hàm thường đặt lên đầu file, còn phần definition của hàm sẽ đặt ở cuối file (Giống với ví dụ kể trên). Mục đích để các hàm quan trọng (ở đây là hàm main) sẽ được xuất hiện ở đầu file.
- Trong project có nhiều file, nguyên mẫu hàm thường xuất hiện trong các file header (.h), mục đích là để cung cấp nguyên mẫu hàm, hay declaration của hàm cho hàm ở file khác có thể sử dụng.
👉 Lợi ích của User-defined Function
- Khả năng tái sử dụng code. Khi khai báo các hàm, chúng ta có thể sử dụng nhiều lần trong một chương trình, hoặc có thể là nhiều project khác nhau.
- Quản lý và tổ chức chương trình dễ dàng hơn.
- Code dễ đọc hơn 😀
👉 C Library Function - Các hàm của thư viện có sẵn
C++ cung cấp một số thư viện với các hàm có sẵn để user sử dụng mà không cần viết lại. Một số hàm được sử dụng phổ biến như sqrt(), abs(), isdigit()...
Để sử dụng các hàm thư viện, chúng ta cần #include đến header file chứa các hàm đó, các header file này cũng có sẵn khi chúng ta cài các compiler C++.
Ví dụ, các hàm toán học như sqrt(), abs() sẽ có trong header file cmath.
🔻 Ví dụ tính căn bậc hai của một số nguyên
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double number, squareRoot;
number = 25.0;
// sqrt() is a library function to calculate the square root
squareRoot = sqrt(number);
cout << "Square root of " << number << " = " << squareRoot;
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.
Square root of 25 = 5
>>>= 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 😊