Hàm trong C++
Kinh nghiệm chỉ ra rằng cách thức tốt nhất để phát triển và duy trì một chương trình lớn là xây dựng
nó thành những bộ phận nhỏ và đơn giản. Kĩ thuật này được gọi là chia và kiểm soát (divide and conquer).
Nhiều ứng dụng mà ta phát triển có nhiều hơn một hàm cùng tên. Kĩ thuật này gọi là nạp chồng hàm (function
overloading) được sử dụng để thực hiện các hàm thực hiện cùng một nhiệm vụ có các tham số thuộc dạng
khác nhau hoặc có thể số lượng tham số cũng khác nhau. Chúng ta xem xét các mẫu hàm – một cơ chế định
nghĩa một gia đình các hàm nạp chồng.
Phần này cũng bao gồm thảo luận về các hàm tự gọi chúng trực tiếp hoặc gián tiếp (qua hàm khác). Một chủ đề
gọi là đệ qui (recursion).
Các thành phần của chương trình C++
Một chương trình C++ điển hình được viết bằng cách kết hợp hàm và lớp mới mà bạn viết với hàm và lớp đóng gói
sẵn trong C++ Standard Library. C++ Standard Library cung cấp một tập hợp phong phú các hàm cho tính toán
toán học, xử lí chuỗi, xử lí kí tự, đầu ra, đầu vào, check lỗi và nhiều hoạt động hữu dụng khác.
Hàm cho phép bạn mô đun hóa một chương trình bằng cách chia nhiệm vụ thành các đơn vị. Bạn sử dụng kết hợp các
hàm trong thư viện và các hàm của bản thân bạn trong mọi chương trình bạn viết. Các hàm mà bạn viết được biết đến
như là các hàm người dùng định nghĩa hay các hàm người viết chương trình định nghĩa. Các phát biểu trong phần
thân hàm chỉ được viết một lần, và có thể được sử dụng lại từ một vài nơi trong chương trình và ẩn đối với các
hàm khác.
Có một vài động cơ để mô đun hóa một chương trình với các hàm. Một là cách tiếp cận chia và kiểm soát. Cái khác là
sử dụng lại chương trình. Ví dụ, trong chương trình chúng ta không phải định nghĩa làm thế nào để đọc text từ bàn
phím, C++ cung cấp khả năng này qua hàm getline trong header <string>. Một động cơ thứ ba là tránh lặp lại code.
Ngoài ra, chia chương trình thành các hàm làm chương trình trở nên dễ dàng hơn để debug và duy trì.
Như bạn biết, một hàm được khởi động bởi lời gọi hàm. Và khi hàm được gọi hoàn thành nhiệm vụ của nó, nó hoặc trả về
một kết quả hoặc đơn giản chuyển quyền kiểm soát chương trình về nơi gọi nó. Một hình tượng của cấu trúc này là một
hình thức quản lí có cấp bậc. Ông chủ (tương ứng với hàm gọi) yêu cầu một công nhân (tương ứng với hàm được gọi)
thực hiện một nhiệm vụ và báo cáo lại kết quả công việc sau khi hoàn thành nhiệm vụ. Ông chủ không cần biết làm cách nào
công nhân đó thực hiện nhiệm vụ được giao. Người công nhân có thể gọi thêm những công nhân khác, mà ông chủ không hề biết.
Việc ẩn thực hiện các chi tiết giúp phát triển tốt phần mềm. Hàm boss chia trách nhiệm cho các hàm worker và worker1 lại
đóng vai trò hàm boss đối với worker4 và worker5.