Một hàm là một nhóm các câu lệnh cùng nhau thực hiện một nhiệm vụ. Mỗi chương trình C++ có ít nhất một hàm, là hàm main().
Bạn có thể chia mã của bạn thành các hàm riêng biệt. Cách bạn phân chia mã của bạn giữa các hàm khác nhau tùy thuộc vào bạn, nhưng về mặt logic mỗi hàm thực hiện một tác vụ cụ thể.
Một khai báo hàm cho trình biên dịch biết về tên, kiểu trả về và các tham số của hàm. Định nghĩa hàm cung cấp phần thân thực của hàm.
Thư viện chuẩn C++ cung cấp nhiều hàm được tích hợp sẵn mà chương trình của bạn có thể gọi. Ví dụ, strcat() để nối hai chuỗi, memcpy() để sao chép một vị trí bộ nhớ sang một vị trí khác và nhiều hàm khác.
Hàm trong C++ còn được gọi là thủ tục hoặc chương trình con trong các ngôn ngữ lập trình khác.
Để thực hiện bất kỳ tác vụ nào, chúng ta có thể tạo ra các hàm. Một hàm có thể được gọi nhiều lần. Nó cung cấp tính mô đun và khả năng sử dụng lại mã. Hàm giúp phân chia vấn đề phức tạp thành các thành phần nhỏ giúp chương trình dễ hiểu và dễ sử dụng.
Nội dung chính
Lợi thế của các hàm trong C++
1. Tái sử dụng mã
Bằng cách tạo các hàm trong C++, bạn có thể gọi nó nhiều lần. Vì vậy, bạn không cần phải viết cùng một mã một hoặc nhiều lần nữa.
2. Tối ưu hóa mã
Nó làm cho mã được tối ưu hóa, chúng ta không cần phải viết nhiều mã.
Giả sử, bạn phải kiểm tra 3 số (531, 883 và 781) có phải là số nguyên tố hay không. Không sử dụng hàm, bạn cần viết logic số nguyên tố 3 lần. Vì vậy, có sự lặp lại của mã.
Nhưng nếu bạn sử dụng các hàm, bạn chỉ cần viết logic một lần và bạn có thể sử dụng lại nó nhiều lần.
Định nghĩa một hàm
Dạng chung của định nghĩa hàm trong C++ như sau:
return_type function_name(parameter list) { // code }
Định nghĩa hàm trong lập trình C++ bao gồm tên hàm và phần thân hàm . Dưới đây là tất cả các phần của hàm:
- Kiểu trả về: Một hàm có thể trả về một giá trị. Các return_type là kiểu dữ liệu của giá trị hàm trả về. Một số hàm thực hiện các hoạt động mong muốn mà không trả về một giá trị. Trong trường hợp này, return_type là từ khóa void.
- Tham số: Một tham số giống như một trình giữ chỗ. Khi một hàm được gọi, bạn chuyển một giá trị cho tham số. Giá trị này được gọi là tham số hoặc đối số thực tế. Danh sách tham số tham chiếu đến loại, thứ tự và số tham số của hàm. Các tham số là tùy chọn; có nghĩa là, một hàm có thể không chứa tham số.
- Thân hàm: Phần thân hàm chứa một tập hợp các câu lệnh xác định chức năng của hàm.
Tên hàm: Đây là tên thực của hàm.
Ví dụ hàm trong C++
Ví dụ dưới đây là mã nguồn cho một hàm được gọi là max(). Hàm này truyền vào hai tham số num1 và num2 và trả về giá trị lớn nhất giữa hai tham số:
/* hàm trả về giá trị lớn nhất giữa 2 số */ int max(int num1, int num2) { /* khai báo biến local */ int result; if (num1 > num2) result = num1; else result = num2; return result; }
Khai báo hàm trong C++
Một khai báo hàm cho trình biên dịch biết về tên hàm và cách gọi hàm. Cơ thể thực tế của hàm có thể được định nghĩa riêng.
Một khai báo hàm có các phần sau:
return_type function_name(parameter list);
Đối với hàm được định nghĩa ở trên max (), khai báo hàm như sau:
int max(int num1, int num2);
Tên tham số không quan trọng trong khai báo hàm chỉ loại của chúng là bắt buộc, vì vậy sau đây cũng là khai báo hợp lệ:
int max(int, int);
Khai báo hàm là bắt buộc khi bạn định nghĩa một hàm trong một tệp nguồn và bạn gọi hàm đó trong một tệp khác. Trong trường hợp này, bạn nên khai báo hàm ở đầu tệp gọi hàm.
Gọi một hàm trong C++
Hàm trong lập trình C++ hoạt động như thế nào? Hình ảnh sau đây mô tả gọi một hàm do người dùng định nghĩa bên trong hàm main():
Trong khi tạo một hàm C, bạn đưa ra một định nghĩa về chức năng của hàm. Để sử dụng một hàm, bạn sẽ phải gọi hàm đó để thực hiện tác vụ được xác định.
Khi một chương trình gọi một hàm, điều khiển chương trình được chuyển đến hàm được gọi. Một hàm được gọi thực hiện một nhiệm vụ đã định nghĩa và khi câu lệnh trả về của nó được thực hiện hoặc khi nó kết thúc bằng hàm đóng, nó sẽ trả về chương trình điều khiển quay trở lại chương trình chính.
Để gọi một hàm, bạn chỉ cần chuyển các tham số bắt buộc cùng với tên hàm và nếu hàm trả về một giá trị, thì bạn có thể lưu trữ giá trị trả về. Ví dụ:
#include <iostream> using namespace std; /* khai bao ham */ int max(int num1, int num2); int main () { /* dinh nghia bien local */ int a = 100; int b = 200; int ret; /* goi mot ham de lay gia tri lon nhat */ ret = max(a, b); cout << "Max value is: " << ret << endl; return 0; } /* ham tra ve gia tri lon nhat giua hai so */ int max(int num1, int num2) { /* dinh nghia bien local */ int result; if (num1 > num2) result = num1; else result = num2; return result; }
Kết quả:
Max value is : 200
Các đối số của hàm trong C++
Nếu một hàm sử dụng các đối số, nó phải khai báo các biến chấp nhận các giá trị của các đối số. Các biến này được gọi là các tham số chính thức của hàm.
Các tham số chính thức hoạt động giống như các biến địa phương (local) khác bên trong hàm và được tạo khi nhập vào hàm và bị hủy khi thoát.
Trong khi gọi một hàm, có hai cách trong đó các đối số có thể được chuyển đến một hàm:
No. | Kiểu gọi & mô tả |
---|---|
1 | Call by value
Phương thức này sao chép giá trị thực của một đối số vào tham số chính thức của hàm. Trong trường hợp này, các thay đổi được thực hiện cho tham số bên trong hàm không ảnh hưởng đến đối số. |
2 | Call by reference
Phương thức này sao chép địa chỉ của một đối số vào tham số chính thức. Bên trong hàm, địa chỉ được sử dụng để truy cập đối số thực tế được sử dụng trong cuộc gọi. Điều này có nghĩa là các thay đổi được thực hiện cho tham số ảnh hưởng đến đối số. |
Theo mặc định, C++ sử dụng call by value để chuyển đối số. Nói chung, nó có nghĩa là mã trong một hàm không thể thay đổi các đối số được sử dụng để gọi hàm.