Cách viết hàm và gọi hàm trong C / C++
Trong bài viết này, codehow sẽ hướng dẫn các bạn cách viết hàm và gọi hàm trong C / C++. Đây là một khái niệm mới so với các bạn viết trước. Để có thể hiểu được bài này, các bạn cần nắm được các kiến thức cơ bản về biến và kiểu dữ liệu trong C / C++.
Hàm được sử dụng rất nhiều trong các chương trình và các lập trình viết rất thích sử dụng hàm. Nó giúp tạo ra các đoạn code có thể kế thừa (nghĩa là tạo một lần và dùng nhiều lần). Điều này giúp chương trình gọn gàng hơn và dễ dàng hơn trong việc bảo trì.
Vậy làm thế nào để có thể viết hàm và gọi hàm trong C / C++ thì hãy bắt đầu ngay cùng mình thôi nào.
Hàm trong C / C++ là gì?
Hàm trong C / C++ được hiểu đơn giản là một nhóm các câu lệnh để thực hiện một nhiệm vụ nào đó. Nó được sử dụng trong việc chia nhỏ các đoạn code và có thể kế thừa lại.
Hàm có thể được gọi ở nhiều nơi trong một chương trình, như vậy sẽ rất thuận tiện cho các lập trình viên muốn sử dụng lại đoạn code đó.
Ví dụ: Mình muốn kiểm tra một số có phải là số nguyên tố hay không.
- Nếu không sử dụng hàm, cứ mỗi lần kiểm tra ta lại phải viết một đống code đó vào chương trình. Như vậy chương trình sẽ rất nặng.
- Nếu sử dụng hàm, ta khai báo hàm kiểm tra số nguyên tố và đặt tên cho nó là SoNguyenTo. Như vậy sau này muốn kiểm tra số nguyên tố ta chỉ cần gọi hàm SoNguyenTo và truyền số cần kiểm tra vào.
Để hiểu rõ hơn các bạn hãy cùng xem cú pháp của nó nhé.
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ó bao gồm các kiểu số nguyên, chuỗi, ... . Trong một số trường hợp chúng ta không muốn trả về giá trị thì có thể sử dụng void thay cho kiểu dữ liệu.
- function_name: Đây là tên hàm. Vì nó thực hiện một hành động nào đó, vì vậy khi đặt tên chúng ta nên đặt tên là một hành động hoặc nhiệm vụ của hàm đó. Quy tắt đặt tên hàm tương tự như đặt tên biến.
- parameter list: Đây là danh sách các tham số truyền vào hàm. Khi viết hàm ta sẽ khai báo các tham số này (tham số hình thức) và khi gọi hàm ta sẽ truyền các tham số thực vào. Một hàm có thể không có tham số nào.
- statements: Đây là các câu lệnh bên trong hàm. Các câu lệnh này thực hiện một hành động, nhiệm vụ mà chúng ta muốn tạo.
- return value: Đây là giá trị trả về khi hàm được gọi. Nếu return_type là void thì không cần return value giá trị trả về.
Ví dụ: Khai báo một hàm tinhGiaiThua()
có kiểu dữ liệu trả về là int, tham số truyền vào là int a và giá trị trả về là a * a.
int tinhGiaiThua(int a){ return a * a; }
Ví dụ: Khai báo một hàm showNotice()
không có kiểu dữ liệu trả về và cũng không có giá trị trả về. Chỉ đơn giản là hiển thị thông báo ra màn hình.
void showNotice(){ cout<<"Thông báo!!"; }
Các loại hàm trong C / C++
Trong C / C++ có hai loại hàm chính đó là: Hàm có sẵn trong thư viện và hàm do chúng ta định nghĩa.
- Hàm có sẵn trong thư viện: Đây là các hàm có sẵn trong các thư viện, chúng ta chỉ cần khai báo thư viện và gọi nó ra để sử dụng.
- Hàm do chúng ta định nghĩa: Đây là các hàm do chúng ta tự tạo nhằm thực hiện một nhiệm vụ nào đó.
Bây giờ chúng ta sẽ đi vào chi tiết hơn các loại hàm mà chúng ta có thể tự định nghĩa nhé.
Hàm có giá trị trả về trong C / C++.
Trong hàm có giá trị trả về, chúng ta cần khai báo kiểu dữ liệu trả về và cuối chương trình sẽ return giá trị trả về của hàm.
datatype function_name( parameter list ) { statement(s); return value; }
Hàm không có giá trị trả về trong C / C++.
Trong trường hợp chúng ta không muốn hàm trả về giá trị gì cả, thì khai báo kiểu dữ liệu trả về là void và thực hiện hàm như bình thường.
void functionName(parameter){ // statements }
Giá trị mặc định của các tham số hàm trong C / C++
Khi định nghĩa một hàm, ta có thể gán giá trị mặc định cho các tham số truyền vào trong hàm. Nếu khi gọi hàm chúng ta không truyền giá trị cho các tham số thì nó sẽ lấy giá trị mặc định của hàm.
Khi gán giá trị mặc định, chúng ta cần gán giá trị lần lượt từ phải qua trái (từ cuối đến đầu). Vì sao mình lại nói như vậy, các bạn hãy cùng xem ví dụ dưới đây sẽ hiểu rõ hơn.
Ví dụ: Mình có hàm congBaSo(), hàm này có chức năng cộng ba số được truyền vào. Như vậy hàm sẽ có ba tham số truyền vào là a, b, c.
Giả sử mình gán giá trị mặc định cho cả ba số, lúc này sẽ không có gì đặc biệt.
//Khai báo hàm int congBaSo(int a = 1, int b = 2, int c = 3){ return a + b + c; } //gọi hàm congBaSo(); // không cần truyền tham số nào cả.
Nếu mình muốn gán hai số là biến a = 1 và c = 3 thôi, biến b không cần gán giá trị mặc định. Lúc này ta cần phải đưa biến a = 1 và c = 3 ra cuối cùng.
//khai báo hàm int congBaSo(int b, int a = 1, int c = 3){ return a + b + c; } //gọi hàm congBaSo(b);//chỉ cần truyền tham số b
Với ví dụ trên, ta có thể truyền giá trị mặc định cho các tham số như sau:
- Gán giá trị mặc định cho cả ba tham số.
- Gán giá trị mặc định cho hai tham số cuối.
- Gán giá trị mặc định cho tham số cuối cùng.
Chương trình C++ hoàn thiện:
#include <iostream> #include <math.h> using namespace std; int congBaSo(int b, int a = 1, int c = 3){ return a + b + c; } int main() { int a, c, b = 2; cout<<congBaSo(b); cout<<"\n-------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Cách viết hàm trong C / C++
Trong phần này mình sẽ hướng dẫn các bạn cách viết hàm trong C / C++. Sau khi tìm hiểu về hàm là gì và cú pháp của hàm như thế nào thì các bạn đã có thể tự định nghĩa cho mình một hàm rồi.
Cách viết hàm không có giá trị trả về:
Ta sẽ khai báo kiểu dữ liệu trả về là void và cuối hàm không cần return giá trị trả về.
Ví dụ:
void tong(int a, int b) { cout << a << " + " << b << " = " << a + b << endl; }
Cách viết hàm có giá trị trả về:
Khi định nghĩa hàm ta cần khai báo kiểu dữ liệu của hàm và cuối hàm cần return giá trị cần trả về.
Ví dụ:
int tong(int a, int b) { return a + b; }
Cách viết hàm có tham số truyền vào:
Khi định nghĩa hàm ta sẽ khai báo kiểu dữ liệu của tham số và tên tham số. Nếu muốn có thể gán giá trị mặc định cho tham số này.
Ví dụ:
int tong(int a, int b = 0){ return a + b; }
Cách viết hàm không có tham số truyền vào:
Khi định nghĩa hàm ta không cần truyền tham số vào, hàm này thường được dùng để thông báo ra màn hình.
Ví dụ:
void thongBao(){ cout<<"Thông báo!!!"; }
Cách gọi hàm trong C / C++
Để có thể gọi một hàm ta gọi tên hàm và truyền vào tham số của hàm nếu có.
Ví dụ mình có hàm dưới đây:
int tong(int a, int b = 0){ return a + b; }
Thì khi gọi hàm ta sẽ gọi như sau:
tong(a, b);
Trong trường hợp chúng ta gọi một hàm chưa được định nghĩa, khi đó sẽ bị lỗi. Hoặc khi gọi hàm có tham số, mà chúng ta không truyền tham số hoặc truyền thiếu tham số cũng bị lỗi.
Vì vậy khi gọi hàm, chúng ta cần kiểm tra kỹ các tham số truyền vào, kiểu dữ liệu của nó nữa nhé.
Để hiểu rõ hơn về cách gọi hàm, các bạn hãy xem các ví dụ ở phần tiếp theo nhé !!!!
Ví dụ sử dụng hàm trong C / C++
Trong phần này mình sẽ thực hiện hai ví dụ sử dụng hàm trong C / C++, để các bạn có thể nắm được cách viết hàm và gọi hàm trong C / C++. Cụ thể như sau:
Ví dụ 1: Viết chương trình tính diện hình chữ nhật bằng cách viết hàm DienTichHCN()
để tính trong C.
#include <stdio.h> #include <stdbool.h> int DienTichHCN(int a, int b){ return a * b; } int main(void) { int a, b; printf("Nhập vào chiều dài a: "); scanf("%d", &a); printf("Nhập vào chiều dài b: "); scanf("%d", &b); printf("Diện tích hình chữ nhật là: %d", DienTichHCN(a,b)); printf("\n-------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Kết quả:
Ví dụ 2: Viết chương trình tính diện tích hình tròn bằng cách viết hàm DienTichHT()
để tính trong C++.
#include <iostream> #include <math.h> using namespace std; const double PI = 3.14; double DienTichHT(int r){ return PI * r * r; } int main() { int r; cout<<"Nhập vào bán kính r: "; cin>>r; cout<<"Diện tích hình tròn là: "<<DienTichHT(r); cout<<"\n-------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Lời kết
Như vậy là chúng ta đã cùng nhau tìm hiểu về cách viết hàm và gọi hàm trong C / C++. Qua bài viết trên, mình xin tóm gọn lại các ưu điểm khi sử dụng hàm như sau:
- Có thể kế thừa hàm đã định nghĩa. Khai báo một lần và sử dụng nhiều lần.
- Làm cho code gọn gàng hơn, chuyên nghiệp hơn.
- Dễ dàng bảo trì và sửa lỗi.
Ở bài tiếp theo, mình sẽ hướng dẫn chi tiết hơn về tham trị và tham chiếu của hàm trong C / C++. Các bạn chú ý theo dõi nhé !!!