Cách viết hàm và cách gọi hàm trong C++ (function) - Học C++ căn bản và nâng cao
Trong bài này mình sẽ hướng dẫn cách viết hàm trong C++, qua bài học bạn sẽ hiểu khái niệm hàm là gì, cũng như cách gọi hàm trong C++ đầy đủ nhất. Hàm là một tính năng rất quan trọng trong hầu hết các ngôn ngữ lập trình, nó giúp lập trình viên tạo ra những đoạn code có tính kế thừa, giúp việc ...
Trong bài này mình sẽ hướng dẫn cách viết hàm trong C++, qua bài học bạn sẽ hiểu khái niệm hàm là gì, cũng như cách gọi hàm trong C++ đầy đủ nhất.
Hàm là một tính năng rất quan trọng trong hầu hết các ngôn ngữ lập trình, nó giúp lập trình viên tạo ra những đoạn code có tính kế thừa, giúp việc phát triển và bảo trì dễ dàng hơn. Vậy hàm là gì? Tại sao nên sử dụng hàm thì chúng ta cùng tìm hiểu ngay nhé.
1. Tại sao sử dụng hàm trong C++?
Để biết tại sao sử dụng hàm thì hãy bắt đầu bằng một ví dụ. Giả sử trong chương trình chúng ta có đoạn code tính tổng hai số nguyên như sau:
#include <iostream> using namespace std; int main() { int a = 5; int b = 10; int c = a + b; cout << c << " + " << b << " = " << c << endl; return 0; }
Nếu chúng ta muốn tính tổng 2 số nguyên ở nhiều nơi trong chương trình thì sao? Có phải chúng ta sẽ coppy đoạn code trên và dán lại ngay chổ chúng ta cần tính tổng. Như vậy chương trình chúng ta sẽ trở nên dài hơn và code bị trùng lặp lại rất nhiều.
Để giải quyết vấn đề trên thì trong C++ có hỗ trợ hàm (function), cho phép chúng ta có thể sử dụng lại đoạn code mà không cần phải coppy code và dán lại.
Trong C++ có rất nhiều hàm có sẵn, và các bạn cũng đã từng sử dụng rồi đấy, đó là hàm sizeof. Hàm này có công dụng là trả về kích thước của một biến dựa vào kiểu dữ liệu của biến đó.
2. Cú pháp khai báo hàm trong C++
Hàm trong C++ hay còn gọi là function, là tập hợp nhiều câu lệnh để thực hiện một chức năng cụ thể nào đó. Hàm có thể được gọi lại ở nhiều nơi khác nhau trong chương trình.
Sau đây là một cấu trúc định nghĩa hàm trong C++.
return_type function_name( parameter list ) { statement(s); return value; }
Trong đó:
- return_type: kiểu dữ liệu của giá trị mà hàm sẽ trả về. Có thể là kiểu số như là 1, 2, 3,4 .. hoặc kiểu chuỗi như "Nguyen Van A", "Nguyen Van B" ... Tuy nhiên, có một số hàm sẽ không có trả về giá trị nào, chúng ta có thể khai báo return_type là void.
- function_name: là tên hàm, quy tắc đặt tên giống như biến vậy.
- parameter list: tham số của hàm. Khi gọi hàm chúng ta sẽ truyền giá trị thật sự vào các tham số của hàm, lúc này ta gọi đó là tham số thực tế. Còn khi định nghĩa hàm thì các tham số này được gọi là tham số hình thức. 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 cho một chức năng cụ thể nào đó. chúng ta có thể định nghĩa hàm mà không có câu lệnh nào bên trong thân hàm, tuy nhiên không khuyến khích các bạn tạo những hàm như vậy, một hàm được tạo ra 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 này được gọi.
Ví dụ: Khai báo một hàm có tên là showMessage và không có tham số truyền vào.
int showMessage(){ // lenh ben trong ham return 1; }
Function trong C++ có nhiều ưu điểm như sau:
- Tái sử dụng lại code: 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 phải viết lại đoạn code trùng nhau nhiều lần.
- Tối ưu code: Nó làm cho chương trình chúng ta ngắn gọn và tối ưu. Vì chương trình chúng ta không có nhiều đoạn code trùng lặp nhau.
- Dể đọc và dể bảo trì: Nó làm cho chương trình chúng ta 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.
3. Cách gọi hàm trong C++
Để gọi một hàm trong C++ thì ta sẽ gọi đến 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 thì ta gọi như sau:
sizeof(ten_bien);
Nếu bạn gọi đến một hàm chưa được định nghĩa thì sẽ bị báo lỗi.
Để hiểu rõ hơn về cách gọi hàm trong C++ thì hãy tìm hiểu ở các phần tiếp theo.
4. Các loại hàm trong C++
Trong C++ có 2 loại hàm đó là:
- Hàm định nghĩa sẳn, hay còn gọi là thư viện hàm: Đó là những hàm được dựng 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: Đó là hàm do người lập trình viên định nghĩa theo mục đích sử dụng nhất định.
Trong nội dung bài học hôm nay chúng ta chỉ tìm hiểu về hàm do người dụng định nghĩa. Hàm dựng sẳn thì chúng ta sẽ tìm hiểu trong một bài khác.
Tuy nhiên, thực tế thì đó không phải là loại hàm nhé các bạn, mà nó chỉ là cách chúng ta chia ra để phân biệt mà thôi.
Hàm C++ có hai loại chuẩn như sau:
Hàm không có giá trị trả về
Đây là loại hàm không có sử dụng lệnh return và kiểu dữ liệu khai báo cho hàm là void, thường được dùng trong trường hợp bạn muốn xử lý dữ liệu ngay bên trong hàm đó.
Cú pháp như sau:
void functionName(parameter){ // statements }
Ví dụ: Bạn cần viết một hàm C++ dùng để hiển thị dữ liệu lên màn thình thì có thể sử dụng loại hàm này.
Hàm có giá trị trả về
Đây là loại hàm có sử dụng lệnh return và có kiểu dữ liệu trả về khác void, thường được dùng trong trường hợp 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.
Cú pháp loại hàm này như sau:
datatype function_name( parameter list ) { statement(s); return value; }
Trong đó giá trị value phải có kiểu dữ liệu như lúc khai báo là datatype nhé.
Ví dụ: Viết chương trình tìm số lớn nhất trong ba số, sau đó lấy số lớn nhất đó để xử lý tiếp trong hàm main, lúc này bạn phải xây dựng hàm có giá trị trả về.
5. Cách viết hàm trong C++
Khi viết hàm chúng ta phải đặt nó bên ngoài hàm main nhé các bạn. Thường thì sẽ đặt phía trên hàm main hoặc viết ra một file riêng rồi gọi vào. Sau đâ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++, hàm không có giá trị nào trả về th ta sử dụng void. Ví dụ một hàm đơn giản là xuất ra màn hình câu chào như sau:
#include <iostream> using namespace std; void Show() { cout << "Xin chao cac ban den voi Zaidap.com.net" << endl; } int main() { Show(); return 0; }
Và kết quả sau khi thực thi đoạn code trên:
Cách viết hàm C++ có giá trị trả về
Trong C++, một hàm thường có 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 2 số nguyên như sau:
#include <iostream> using namespace std; int Tong(int a, int b) { return a + b; } int Hieu(int a, int b) { return a - b; } int Nhan(int a, int b) { return a*b; } int main() { int a = 5; int b = 6; cout << a << " + " << b << " = " << Tong(a, b) << endl; cout << a << " - " << b << " = " << Hieu(a, b) << endl; cout << a << " x " << b << " = " << Nhan(a, b) << endl; return 0; }
Và kết quả sau khi thực thi đoạn code trên:
Cách viết hàm C++ không có tham số
Trong C++ hàm được định nghĩa không có tham số nào chúng ta gọi đó là hàm không có tham số. Ví dụ như sau:
#include <iostream> using namespace std; void Show() { cout << "Xin chao cac ban den voi Zaidap.com.net" << endl; cout << "Day la ham khong co tham so"; } int main() { Show(); return 0; }
Và kết quả sau khi thực thi đoạn code trên:
Cách viết hàm C++ có tham số
Chúng ta cùng xem một ví dụ đơn giản về hàm có tham số trong C++ đó là in ra màn hình tổng 2 số nguyên.
#include <iostream> using namespace std; void tong(int a, int b) { cout << a << " + " << b << " = " << a + b << endl; } int main() { int a = 10; int b = 5; int c = 3; int d = 7; tong(a,b); tong(c,d); tong(b,c); tong(a,d); return 0; }
Và kết quả sau khi thực thi đoạn code trên như sau:
6. 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 nhiên của tham số. Khi truyền giá trị thực tế cho tham số thì nó sẽ lấy giá trị truyền vào, khi không truyền tham số vào thì nó sẽ lấy giá trị mặc định.
Như ở ví dụ sau chúng ta định nghĩa hàm Tong có 2 tham số đó là a, b, chúng ta sử dụng giá trị mặc định cho tham số a là 10, tham số b là 15.
#include <iostream> using namespace std; void tong(int a = 10, int b = 15) { cout << " " << a << " + " << b << " = " << a + b << endl; } int main() { int a = 20; int b = 40; cout << "Truyen 2 tham so day du: a = " << a << ", b = " << b << endl; tong(a, b); cout << "Truyen tham so thu nhat: a = " << a << endl; tong(a); cout << "Khong truyen tham so nao" << endl; tong(); return 0; }
Và kết quả sau khi thực thi đoạn code trên như sau:
Giá trị mặc định của tham số phải được khai báo theo tứ tự từ bên phải cùng qua trái, khai báo như các trường hợp sau khi biên dịch sẽ ra lỗi.
Ví dụ hàm chúng ta có 3 tham số, chúng ta chỉ để giá trị mặc nhiên cho tham số thứ 1 và thứ 2.
#include <iostream> using namespace std; void tong(int a = 10, int b=5, int c) { cout << "tham so thu 1: " << a << endl; cout << "tham so thu 2: " << b << endl; cout << "tham so thu 3: " << c << endl; cout << "Tong: " << a+b+c << endl << endl; } int main() { int a = 1; int b = 2; int c = 3; tong(a, b, c); tong(a,b); tong(a); return 0; }
Và sau khi thực thi đoạn code trên sẽ báo lỗi như sau:
Ví dụ hàm chúng ta có 3 tham số, nhưng chúng ta chỉ để giá trị mặc nhiên cho tham số thứ 1
#include <iostream> using namespace std; void tong(int a = 10, int b, int c) { cout << "tham so thu 1: " << a << endl; cout << "tham so thu 2: " << b << endl; cout << "tham so thu 3: " << c << endl; cout << "Tong: " << a+b+c << endl << endl; } int main() { int a = 1; int b = 2; int c = 3; tong(a, b, c); tong(a,b); tong(a); return 0; }
Và kết quả sau khi thực thi đoạn code trên sẽ ra lỗi biên dịch sau:
Như vậy giá trị mặc nhiên chỉ được khai báo cho các tham số theo thứ tự ngoài cùng bên phải đi vào.
Ở ví dụ trên sử dụng các giá trị mặc nhiên cho tham số như sau mới là hợp lệ:
- chỉ sử dụng giá trị mặc nhiên cho tham số thứ 3
- sử dụng giá trị mặc nhiên cho tham số thứ 2, và tham số thứ 3
- sử dụng giá trị mặc nhiên cho cả 3 tham số 1, 2, 3
7. Kết luận
Vậy là chúng ta đã tìm hiểu xong về hàm trong C++, hay còn gọi là function trong C++. Ở bài này chúng ta chỉ cần nắm một số nội dung như cách định nghĩa hàm, một hàm được định nghĩa gồm có kiểu trả về, tên hàm, các tham số của hàm, kiểu dữ liệu của tham số hàm và thân hàm.
Mình xin kết thúc bài học về hàm C++ tại đây. Trong bài tiếp theo chúng ta sẽ cùng tìm hiểu về cách gọi hàm bằng giá trị hoặc tham chiếu.