Hàm
Mọi nhiệm vụ đều có thể được chia thành các nhiệm vụ con, mỗi nhiệm vụ con có thể được biểu diễn trực tiếp dưới dạng mã code hoặc được chia nhỏ hơn thành các nhiệm vụ con khác. Phương pháp này được gọi là stepwise refinement Federal refinement
. Các hàm được sử dụng để viết mã code cho các nhiệm vụ con cần giải quyết. Mã code mô tả những gì một hàm thực hiện được gọi là function definition
:
function_header
{
instructions
}
2
3
4
Phần trước dấu ngoặc đầu tiên là header
của định nghĩa hàm, và phần nằm giữa các dấu ngoặc là body
của định nghĩa hàm. Tiêu đề hàm bao gồm mô tả kiểu giá trị trả về, tên (identifier
) và các formal parameters
. Số lượng tham số truyền vào hàm bị giới hạn và không thể vượt quá 64.
Hàm có thể được gọi từ các phần khác của chương trình bao nhiêu lần tùy ý. Trên thực tế, kiểu trả về, định danh hàm và kiểu tham số tạo thành function prototype
.
Nguyên mẫu hàm là khai báo hàm, nhưng không phải định nghĩa của nó. Nhờ việc khai báo rõ ràng kiểu trả về và danh sách kiểu đối số, việc kiểm tra kiểu nghiêm ngặt và ép kiểu ngầm định có thể thực hiện trong quá trình gọi hàm. Rất thường xuyên, các khai báo hàm được sử dụng trong các lớp để cải thiện khả năng đọc mã.
Định nghĩa hàm phải khớp chính xác với khai báo của nó. Mỗi hàm được khai báo phải được định nghĩa.
Ví dụ:
double // kiểu giá trị trả về
linfunc (double a, double b) // tên hàm và danh sách tham số
{
// toán tử tổng hợp
return (a + b); // giá trị trả về
}
2
3
4
5
6
Toán tử return có thể trả về giá trị của một biểu thức nằm trong toán tử này. Nếu cần, giá trị biểu thức sẽ được chuyển đổi sang kiểu kết quả của hàm. Những gì có thể được trả về: simple types, simple structures, object pointers. Với toán tử return
, bạn không thể trả về bất kỳ mảng nào, đối tượng lớp, biến của kiểu cấu trúc phức hợp.
Hàm không trả về giá trị nào nên được mô tả là thuộc kiểu void.
Ví dụ:
void errmesg(string s)
{
Print("error: "+s);
}
2
3
4
Các tham số truyền vào hàm có thể có giá trị mặc định, được định nghĩa bởi các hằng số của kiểu đó.
Ví dụ:
int somefunc(double a,
double d=0.0001,
int n=5,
bool b=true,
string s="passed string")
{
Print("Required parameter a = ",a);
Print("Pass the following parameters: d = ",d," n = ",n," b = ",b," s = ",s);
return(0);
}
2
3
4
5
6
7
8
9
10
Nếu bất kỳ tham số nào có giá trị mặc định, tất cả các tham số tiếp theo cũng phải có giá trị mặc định.
Ví dụ về khai báo sai:
int somefunc(double a,
double d=0.0001, // giá trị mặc định 0.0001 được khai báo
int n, // giá trị mặc định không được chỉ định!
bool b, // giá trị mặc định không được chỉ định!
string s="passed string")
{
}
2
3
4
5
6
7
Xem thêm