Yêu cầu mọi thông tin sao chép từ blog này phải được ghi rõ đầy đủ: Thông tin được sao chép từ "http://www.dangngochoangthanh.blogspot.com".

Cool wallpaper http://www.fancymessage.com

EMOJI KEYBOARD PRO http://emojiselector.com

THƯ VIỆN HÌNH ĐỘNG FLASH ANIMATION: http://flashanimationlibrary.blogspot.ru/

Hệ thống học trực tuyến đang được phát triển và sẽ đưa vào sử dụng vào cuối năm nay. Hãy xem qua một số demo của Học Trực Tuyến.


HỌC TRỰC TUYẾN ĐÃ CUNG CẤP PHIÊN BẢN TRUY CẬP QUA MOBILE http://dangngochoangthanh.blogspot.com/?m=1

XEM KÊNH HỌC TRỰC TUYẾN TRÊN YOUTUBE



Search on This Blog

Saturday, September 11, 2010

Khai báo và sử dụng hàm

Hàm được khai báo theo cú pháp sau đây:
kiểu_dữ_liệu tên_hàm(danh_sách_tham_số) {
Thân hàm;
}
Trong đó,
  • kiểu_dữ_liệu: là kiểu dữ liệu mà hàm trả về.
  • tên_hàm: là tên của hàm, do người lập trình đặt. Tên hàm không được chứa kí tự đặc biệt, không được bắt đầu bằng số.
  • danh_sách_tham_số: là danh sách các tham số dùng như các biến cục bộ. Nếu có nhiều tham số, thì chúng sẽ được phân tách theo các dấu phẩy.
  • Thân hàm: là nội dung mà người lập trình xây dựng nên.
Ví dụ Kết quả
#include using namespace std;
int add(int a, int b)
{
return a+b;
}
int main()
{
cout<
return 0;
}
3
Giải thích: Mọi chương trình trong C++ luôn bắt đầu bởi hàm main. Điều đó có nghĩa là các lệnh trong hàm main sẽ được thực thi một cách tuần tự. Hàm cout sẽ in giá trị của hàm add(1,2). Khi gọi đến hàm add, nó sẽ ánh xạ đến hàm add đã được khai báo ở trên, nó chỉ tạo ra một lời gọi hàm đến hàm đã được xây dựng có tên tương ứng (bạn cần lưu ý đến điều này để phân biệt với khái niệm hàm nội tuyến sẽ được tìm hiểu trong các mục tiếp theo). Với a, b là các tham số hình thức, chúng sẽ được thay thế bằng các giá trị cụ thể là 1 và 2. Hàm add này sẽ trả về giá trị là tổng của a và b nhờ từ khóa return.
Cách khai báo hàm trong ví dụ trên được gọi là khai báo trực tiếp. Chúng ta cũng còn một cách khai báo hàm gián tiếp nữa, mà ta thường gọi là khai báo hàm prototype như sau:
Ví dụ Kết quả
#include using namespace std;
int add(int a, int b);
int main()
{
cout<
return 0;
}
int add(int a, int b)
{
return a+b;
}
3
Trong khai báo hàm dạng này, cấu trúc khai báo hàm khuyết phần thân hàm. Chỉ có khai báo phần tên của hàm theo cú pháp chuẩn. Vị trí đặt hàm xây dựng hoàn chỉnh là bất kì vị trí nào. Cách khai báo hàm prototype có nhiều ưu điểm:
- Bạn có thể không quan tâm đến thứ tự khai báo hàm. Nếu bạn không sử dụng khai báo prototype, thì hàm khai báo sau mới được phép gọi hàm khai báo trước nó. Điều ngược lại là không được phép. Nhưng đối với khai báo prototype thì bạn hoàn toàn không cần quan tâm đến điều này.
- Bạn có thể tách phần khai báo prototype và đặt nó vào trong một tập tin mới, thường là tập tin tiêu đề .h (mà bạn tự đặt tên), phần thân hàm lại chứa trong một tệp khác, thường là .cpp hoặc trong chính tệp chứa chương trình chính. Cách làm này giúp chương trình của bạn sáng sủa hơn rất nhiều. Trong các dự án lập trình lớn, người ta thường phân tách theo dạng này. Chúng ta sẽ xét ví dụ minh họa sau.
Trong ví dụ minh họa này, dự án của tôi gồm có hai tệp: tieude.h để chứa khai báo prototype và main.cpp để chứa thân hàm và hàm main.
Đối với Codeblocks, bạn hãy thực hiện theo các bước sau:
- Tạo mới một dự án C++ và lưu lại. Trong dự án này, mặc định Codeblocks sẽ tạo cho bạn một tệp main.cpp.
- Vào New > File > chọn C/C++ header. Sau đó, bạn hãy chọn vị trí để lưu trữ tệp tiêu đề (thông thường, bạn nên tạo các cấu trúc thư mục khác nhau để lưu tệp .h cũng như tệp .cpp như tôi đã trình bày ở trên).
Đối với Eclipse, bạn thực hiện như sau:
- Kích chuột phải vào thư mục cần đặt tệp .h, chọn New > Header File.
- Kích chuột phải vào thư mục cần đặt tệp .cpp, chọn New > Source File.
Tệp tieude.h Tệp main.cpp
#ifndef TIEUDE_H_INCLUDED #define TIEUDE_H_INCLUDED
int sum(int, int);
void showmsg(void);
#endif // TIEUDE_H_INCLUDED
#include #include “tieude.h”
using namespace std;
int main()
{
showmsg();
return 0;
}
void showmsg(){
cout<
}
int sum(int a, int b){
return a+b;
}
Trong tệp tieude.h, bạn chỉ việc nhập các khai báo prototype vào giữa #define và #endif. Trong tệp main.cpp, bạn cần bổ sung khai báo thư viện #include “tieude.h”. Bạn lưu ý rằng, tên tệp tiêu đề nằm trong dấu nháy kép “”, mà không phải là dấu <>. Các hàm trong chương trình chính có thể sử dụng mà không cần quan tâm đến thứ tự khai báo. Như bạn thấy, các hàm khai báo sau hàm main (điều này chỉ có thể được phép đối với khai báo prototype). Hàm showmsg khai báo trước hàm sum nhưng có thể gọi được hàm sum. Thứ tự tiêu đề của hàm trong tệp tiêu đề hoàn toàn không quan trọng và nó không ảnh hưởng việc sử dụng các hàm theo thứ tự trước sau.
Lưu ý:
- Khi sử dụng khai báo prototype trên các tập tin .h, bạn cần lưu ý, nếu dự án của bạn có sử dụng namespace, ví dụ std, bạn chỉ có thể sử dụng cú pháp truy cập std:: mà không được sử dụng using namespace std trong tệp .h này.
- Nếu tệp .cpp và tệp .h nằm trong cùng thư mục, thì phần #include trong tệp cpp có thể viết tên tệp tiêu đề trong dấu “”. Nếu chúng không nằm trong cùng thư mục, bạn cần chỉ đường dẫn tương đối cho nó. Ví dụ tệp headers.h nằm trong thư mục headers và tệp Main.cpp nằm trong thư mục cpps. Nếu tệp headers.h là tệp tiêu đề của tệp Main.cpp, bạn cần include nó trong Main.cpp. Giả sử headers và cpps nằm trong cùng thư mục src. Khi đó, trong tệp Main.cpp, bạn khai báo include như sau: #include”../headers/headers.h”. Trong đó, dấu ../ để dịch lùi một mức trong cấu trúc cây thư mục (dịch lùi từ thư mục headers một mức chính là thư mục src), sau đó là headers/headers.h.

No comments:

Post a Comment