Hàm trong C++

Một phần của tài liệu Bai giang lap trinh huong doi tuong va c++ (Trang 26 - 27)

Trong ngôn ngữ C cổ (không phải là ngôn ngữ C chuẩn mà chúng ta dùng hiê ̣n nay ) chúng ta có thể thực hiện việc gọi hàm với số lươ ̣ng tham số cũng như kiểu tham số tùy ý mà trình biên dịch sẽ không phàn nàn gì cả . Tất cả dường như đều tốt cho tới khi chúng ta chạy chương trình. Có thể chúng ta sẽ nhận được các kết quả rất khó hiểu mà không có bất cứ mô ̣t dấu hiê ̣u hay gợi ý nào về chúng . Đây có lẽ là mô ̣t trong các lý do làm cho C trở thành một ngôn ngữ được đánh giá là ngôn ngữ Assembly cấp cao . Ngôn ngữ C chuẩn và C++ ngày nay có một cơ chế gọi là nguyên m ẫu hay bản mẫu hàm (function prototype ). Với cơ chế này chúng ta cần khai báo kiểu của các tham số của hàm , kiểu của hàm khi khai báo và định nghĩa chúng . Sự khai báo hay mô tả rõ ràng này được go ̣i là biểu mẫu của hàm. Khi hàm được go ̣i trình biên di ̣ch sẽ sử du ̣ng biểu mẫu của hàm để kiểum tra xem các tham số đươ ̣c truyền có đúng kiểu , số lượng cũng như giá tri ̣ trả về của hàm có được xử lý đúng hay không . Nếu như có các lỗi trong quá trình kiểm tra xảy ra trình biên dịch sẽ thông báo ngay cho lâ ̣p trình viên biết trong quá trình biên di ̣ch.

Cú pháp khai báo một hàm như sau:

<kiểu trả về của hàm > < tên hàm >(<danh sách các kiểu tham số và tên ngăn cách nhau bởi dấu phẩy>);

Ví dụ: int max(int x, int y);

Về bản chất chúng ta không cần có các tên tham biến , chúng chỉ thực sự cần khi chúng ta sử dụng chúng trong việc định nghĩa các hàm . Tuy nhiên điều này cũng không phải là bắt buộc đối với C++ (trong C là bắt buô ̣c). Chúng ta có thể có một tham số nào đó không có tên và nó sẽ không được sử du ̣ng trong thân hàm (tất nhiên vì nó không có tên ). Khi chúng ta go ̣i tới hàm đó chúng ta vẫn phải truyền đúng c ác tham số. Tuy nhiên tác giả của hàm đó sau đó vẫn có thể sử dụng tham số ở đâu đó mà không cần thiết phải thay đổi các lời gọi hàm . Điều này rất tiê ̣n khi chúng ta không muốn có các lời cảnh báo về viê ̣c không sử du ̣n g mô ̣t tham số nào đó trong thân hàm . C và C ++ có hai cách khác nhau để đi ̣nh nghĩa danh sách các tham số . Nếu chúng ta có mô ̣t hàm func (), C++ sẽ hiểu là hàm này không có tham số , C la ̣i hiểu là hàm này có thể có bất kỳ th am số nào . Mô ̣t hàm func(void) sẽ được hiểu là không có tham số trong cả C và C ++. Một trường hợp nữa xảy ra là khi chúng ta không xác đi ̣nh được số tham số cũng như kiểu tham số của hàm mà chúng ta muốn khai báo (gọi là mộ t danh sách tham biến : variable argument list ). Khi đó chúng ta sẽ sử dụng ký pháp (…). Tuy nhiên nên ha ̣n chế sử du ̣ng nó trong C ++, chúng ta có nhiều cách khác để đạt được kết quả này mà không cần tới ký pháp đó .

20

Các giá trị trả về của hàm

Trong nguyên mẫu hàm chúng ta buô ̣c phải chỉ rõ kiểu của hàm , nếu mô ̣t hàm không có kiểu trả về thì kiểu của nó là void . Trong mỗi mô ̣t thân hàm có kiểu bao giờ cũng có ít nhất mô ̣t câu lê ̣nh return . Khi gặp lê ̣nh này trong quá trình thực hiê ̣n , hàm sẽ kết thúc.Trong các hàm không kiểu cũng có thể dùng return để thoát khỏi hàm . Mô ̣t trong các điểm ma ̣nh của ngôn ngữ C và C ++ là một thư viện hàm rất phong phú và linh hoạt . Để sử dụng chúng, lâ ̣p trình viên chỉ cần thực hiê ̣n include các file header chứa các prototype của chúng trong chương trình , phần còn la ̣i sẽ tự do trình biên di ̣ch và trình liên kết thực hiê ̣n . Chúng ta có thể tạo ra các thư vi ện hàm riêng cho mình để sử dụng . Tuy nhiên hãy xem kỹ phần manual của trình biên di ̣ch trước khi thực hiê ̣n.

Một phần của tài liệu Bai giang lap trinh huong doi tuong va c++ (Trang 26 - 27)