Trong bài viết này, chúng ta sẽ khám phá cách viết hàm và cách gọi hàm trong ngôn ngữ lập trình C++. Bài học này sẽ giúp bạn hiểu rõ về khái niệm hàm và cung cấp đầy đủ kiến thức về cách sử dụng hàm trong C++.
Tại sao sử dụng hàm trong C++?
Trước khi đi vào việc tìm hiểu về cách sử dụng hàm trong C++, hãy xem một ví dụ. Giả sử rằng trong chương trình của chúng ta, có một đoạn mã để tính tổng hai số nguyên như sau:
int sum = a + b;
Nếu chúng ta muốn tính tổng hai số nguyên ở nhiều vị trí trong chương trình, chúng ta phải sao chép và dán đoạn mã tính tổng ngay tại các vị trí cần thiết. Điều này khiến chương trình trở nên dài hơn và có nhiều mã lặp lại.
Để giải quyết vấn đề trên, trong ngôn ngữ lập trình C++, chúng ta có thể sử dụng hàm (function), cho phép tái sử dụng đoạn mã mà không cần sao chép và dán lại.
Trong C++, có nhiều hàm có sẵn và bạn đã sử dụng nó, ví dụ như hàm sizeof
. Hàm này trả về kích thước của một biến dựa trên kiểu dữ liệu của biến đó.
Cú pháp khai báo hàm trong C++
Hàm trong C++ là một tập hợp các câu lệnh để thực hiện một chức năng cụ thể. Hàm có thể được gọi ở nhiều vị trí khác nhau trong chương trình.
Dưới đây là cú pháp định nghĩa hàm trong C++:
return_type function_name(parameter list) {
statement(s);
return value;
}
Trong đó:
return_type
: là kiểu dữ liệu của giá trị mà hàm sẽ trả về. Nó có thể là kiểu số như 1, 2, 3, ... hoặc kiểu chuỗi như "Nguyen Van A", "Nguyen Van B",... Có một số hàm không có giá trị trả về, chúng ta có thể khai báoreturn_type
làvoid
.function_name
: là tên của hàm, quy tắc đặt tên tương tự như biến.parameter list
: là các tham số của hàm. Khi gọi hàm, chúng ta sẽ truyền giá trị vào các tham số, gọi là tham số thực tế. Các tham số này được gọi là tham số hình thức trong định nghĩa hàm. Tham số của hàm không bắt buộc phải có. Một hàm có thể không có tham số nào.statement(s)
: các câu lệnh bên trong thân hàm nhằm thực hiện một chức năng cụ thể. Chúng ta có thể định nghĩa một hàm mà không có câu lệnh bên trong thân hàm, tuy nhiên không khuyến khích tạo những hàm như vậy. Một hàm nên có mục đích sử dụng nhất định.return
: là lệnh dùng để trả giá trịvalue
về khi hàm được gọi.
Ví dụ: Khai báo một hàm có tên là showMessage
và không có tham số.
void showMessage() {
cout "Xin chào!";
}
Ưu điểm của hàm trong C++:
- Tái sử dụng mã: Một hàm được tạo trong C++, chúng ta có thể gọi lại hàm đó nhiều lần mà không cần viết lại đoạn mã lặp lại.
- Tối ưu mã: Nó làm cho chương trình ngắn gọn và tối ưu. Vì chương trình không có nhiều đoạn mã lặp lại.
- Dễ đọc và dễ bảo trì: Nó làm cho chương trình rõ ràng và dễ hiểu, rất tiện lợi cho việc bảo trì chương trình sau này.
Cách gọi hàm trong C++
Để gọi một hàm trong C++, ta chỉ cần gọi tên của hàm và truyền các tham số vào (nếu có).
Ví dụ: Hàm sizeof()
có một tham số truyền vào, ta gọi như sau:
int size = sizeof(variable);
Nếu bạn gọi đến một hàm chưa được định nghĩa, chương trình sẽ báo lỗi.
Để hiểu rõ hơn về cách gọi hàm trong C++, hãy tìm hiểu ở các phần tiếp theo.
Các loại hàm trong C++
Trong C++, có hai loại hàm:
- Hàm được định nghĩa sẵn, hay còn gọi là thư viện hàm: Đây là những hàm có sẵn trong C++, chúng ta chỉ cần khai báo thư viện và sử dụng.
- Hàm do người dùng tự định nghĩa: Đây là những hàm mà người lập trình viên tự định nghĩa theo mục đích sử dụng cụ thể.
Trong phạm vi bài viết này, chúng ta chỉ tìm hiểu về hàm do người dùng tự định nghĩa. Hàm được định nghĩa sẵn sẽ được tìm hiểu trong bài viết khác.
Tuy nhiên, thực tế, hai loại này không phải là loại hàm, mà nó chỉ là cách chúng ta phân biệt để hiểu rõ hơn.
Hàm C++ có hai loại chuẩn như sau:
Hàm không có giá trị trả về
Loại hàm này không sử dụng lệnh return
và kiểu dữ liệu trả về được khai báo là void
. Thường được sử dụng khi bạn muốn xử lý dữ liệu ngay bên trong hàm đó.
Ví dụ: Bạn cần viết một hàm C++ để hiển thị dữ liệu lên màn hình, bạn có thể sử dụng loại hàm này.
void displayMessage() {
cout "Hello World!";
}
Hàm có giá trị trả về
Loại hàm này sử dụng lệnh return
và có kiểu dữ liệu trả về khác void
. Thường được sử dụng khi bạn muốn hàm trả về một giá trị khi được gọi để xử lý tiếp trong chương trình.
Ví dụ: Viết chương trình tìm số lớn nhất trong ba số và lấy số lớn nhất đó để xử lý tiếp trong hàm main
. Bạn phải xây dựng hàm có giá trị trả về.
int findMax(int a, int b, int c) {
if (a > b && a > c) {
return a;
} else if (b > a && b > c) {
return b;
} else {
return c;
}
}
Cách viết hàm trong C++
Khi viết hàm trong C++, chúng ta phải đặt nó bên ngoài hàm main
. Thông thường, chúng ta đặt hàm trên hàm main
hoặc viết hàm trong một file riêng và gọi nó vào trong main
. Dưới đây là một số trường hợp cụ thể.
Cách viết hàm C++ không trả về giá trị
Trong C++, khi hàm không có giá trị trả về, chúng ta sử dụng void
. Ví dụ một hàm đơn giản để in ra màn hình lời chào như sau:
void sayHello() {
cout "Xin chào!";
}
Cách viết hàm C++ có giá trị trả về
Trong C++, một hàm thường có một kiểu trả về cụ thể như int
, float
,... Ví dụ đơn giản về hàm có kiểu trả về là tính tổng, hiệu và tích của hai số nguyên như sau:
int sum(int a, int b) {
return a + b;
}
int difference(int a, int b) {
return a - b;
}
int product(int a, int b) {
return a * b;
}
Cách viết hàm C++ không có tham số
Trong C++, hàm không có tham số được gọi là hàm không có tham số. Ví dụ như sau:
void printHello() {
cout "Xin chào!";
}
Cách viết hàm C++ có tham số
Chúng ta hãy xem một ví dụ đơn giản về hàm có tham số trong C++, sẽ in ra màn hình tổng của hai số nguyên.
void printSum(int a, int b) {
cout "Tổng hai số là: " (a + b);
}
Giá trị mặc định của tham số hàm trong C++
Trong C++, hàm cho phép chúng ta định nghĩa giá trị mặc định cho tham số. Khi truyền giá trị thực tế cho tham số, hàm sẽ sử dụng giá trị truyền vào, khi không truyền tham số, hàm sẽ sử dụng giá trị mặc định.
void function(int a = 10, int b = 15) {
cout "Giá trị của a là: " a endl;
cout "Giá trị của b là: " b endl;
}
Trong ví dụ trên, hàm function
có 2 tham số a
và b
, chúng ta sử dụng giá trị mặc định cho a
là 10 và b
là 15.
Kết luận
Vậy là chúng ta đã tìm hiểu về hàm trong C++. Trong bài viết này, chúng ta chỉ cần nắm một số nội dung như cách định nghĩa hàm, cách sử dụng các tham số của hàm và cách thức viết hàm trong C++.
Mình xin kết thúc bài viết về hàm trong C++ tại đây. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu về cách gọi hàm bằng giá trị hoặc tham chiếu.