Các hàm trong C ++
Hàm là một nhóm các câu lệnh cùng thực hiện một tác vụ. Mỗi chương trình C ++ đều có ít nhất một hàm, đó làmain(), và tất cả các chương trình tầm thường nhất có thể xác định các chức năng bổ sung.
Bạn có thể chia mã của mình thành các chức năng riêng biệt. Cách bạn phân chia mã của mình giữa các chức năng khác nhau là tùy thuộc vào bạn, nhưng về mặt logic, việc phân chia thường là sao cho mỗi chức năng thực hiện một nhiệm vụ cụ thể.
Một chức năng declarationcho trình biên dịch biết về tên, kiểu trả về và các tham số của hàm. Một chức năngdefinition cung cấp phần thân thực tế của hàm.
Thư viện chuẩn C ++ cung cấp nhiều hàm tích hợp sẵn mà chương trình của bạn có thể gọi. Ví dụ, hàmstrcat() để nối hai chuỗi, hàm memcpy() để sao chép một vị trí bộ nhớ sang một vị trí khác và nhiều chức năng khác.
Một hàm được biết đến với nhiều tên khác nhau như một phương thức hoặc một quy trình con hoặc một thủ tục, v.v.
Xác định một chức năng
Dạng tổng quát của định nghĩa hàm C ++ như sau:
return_type function_name( parameter list ) {
body of the function
}
Định nghĩa hàm trong C ++ bao gồm tiêu đề hàm và thân hàm. Đây là tất cả các phần của một hàm -
Return Type- Một hàm có thể trả về một giá trị. Cácreturn_typelà kiểu dữ liệu của giá trị mà 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ề giá trị. Trong trường hợp này, return_type là từ khóavoid.
Function Name- Đây là tên thực của hàm. Tên hàm và danh sách tham số cùng nhau tạo thành chữ ký hàm.
Parameters- 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ố đề cập đến kiểu, thứ tự và số lượng các tham số của một hàm. Các thông số là tùy chọn; nghĩa là, một hàm có thể không chứa tham số.
Function Body - 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 thực hiện.
Thí dụ
Sau đây là mã nguồn cho một hàm được gọi là max(). Hàm này nhận hai tham số num1 và num2 và trả về giá trị lớn nhất trong cả hai:
// function returning the max between two numbers
int max(int num1, int num2) {
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Khai báo hàm
Một chức năng declarationcho trình biên dịch biết về tên hàm và cách gọi hàm. Phần thân thực của hàm có thể được định nghĩa riêng biệt.
Một khai báo hàm có các phần sau:
return_type function_name( parameter list );
Đối với hàm max () được định nghĩa ở trên, sau đây là khai báo hàm:
int max(int num1, int num2);
Tên tham số không quan trọng trong khai báo hàm chỉ cần kiểu của chúng, 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 xác định 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 khi tạo một hàm C ++, bạn đưa ra định nghĩa về những gì hàm phải làm. Để sử dụng một hàm, bạn sẽ phải gọi hoặc gọi hàm đó.
Khi một chương trình gọi một hàm, điều khiển chương trình sẽ được chuyển sang hàm được gọi. Một hàm được gọi thực hiện tác vụ được xác định và khi câu lệnh trả về của nó được thực thi hoặc khi đạt đến dấu ngoặc nhọn kết thúc hàm, nó sẽ trả lại điều khiển chương trình 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;
// function declaration
int max(int num1, int num2);
int main () {
// local variable declaration:
int a = 100;
int b = 200;
int ret;
// calling a function to get max value.
ret = max(a, b);
cout << "Max value is : " << ret << endl;
return 0;
}
// function returning the max between two numbers
int max(int num1, int num2) {
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Tôi đã giữ hàm max () cùng với hàm main () và biên dịch mã nguồn. Trong khi chạy tệp thực thi cuối cùng, nó sẽ tạo ra kết quả sau:
Max value is : 200
Đối số hàm
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 giá trị của các đối số. Các biến này được gọi làformal parameters của hàm.
Các tham số chính thức hoạt động giống như các biến cục bộ 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 mà các đối số có thể được truyền cho một hàm:
Sr.No | Loại & Mô tả Cuộc gọi |
---|---|
1 | Gọi theo giá trị 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 đối với tham số bên trong hàm không ảnh hưởng đến đối số. |
2 | Gọi bằng con trỏ 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 được sử dụng trong lệnh gọi. Điều này có nghĩa là các thay đổi được thực hiện đối với tham số sẽ ảnh hưởng đến đối số. |
3 | Gọi bằng tham chiếu Phương thức này sao chép tham chiếu của một đối số vào tham số chính thức. Bên trong hàm, tham chiếu được sử dụng để truy cập đối số thực được sử dụng trong lệnh gọi. Điều này có nghĩa là các thay đổi được thực hiện đối với tham số 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, điều này có nghĩa là mã bên trong một hàm không thể thay đổi các đối số được sử dụng để gọi hàm và ví dụ đã đề cập ở trên trong khi gọi hàm max () được sử dụng cùng một phương thức.
Giá trị mặc định cho các tham số
Khi bạn xác định một hàm, bạn có thể chỉ định một giá trị mặc định cho mỗi tham số cuối cùng. Giá trị này sẽ được sử dụng nếu đối số tương ứng bị bỏ trống khi gọi hàm.
Điều này được thực hiện bằng cách sử dụng toán tử gán và gán giá trị cho các đối số trong định nghĩa hàm. Nếu một giá trị cho tham số đó không được truyền khi hàm được gọi, giá trị đã cho mặc định sẽ được sử dụng, nhưng nếu một giá trị được chỉ định, giá trị mặc định này sẽ bị bỏ qua và giá trị đã truyền được sử dụng thay thế. Hãy xem xét ví dụ sau:
#include <iostream>
using namespace std;
int sum(int a, int b = 20) {
int result;
result = a + b;
return (result);
}
int main () {
// local variable declaration:
int a = 100;
int b = 200;
int result;
// calling a function to add the values.
result = sum(a, b);
cout << "Total value is :" << result << endl;
// calling a function again as follows.
result = sum(a);
cout << "Total value is :" << result << endl;
return 0;
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Total value is :300
Total value is :120