31 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Lý do trả về con trỏ hoặc tham chiếu Tương tự như lý do truyền ₫ịachỉ hoặctruyềntham chiếu: —Tránhsaochépdữ liệulớnkhôngcầnthiết — Để có thể truy cậptrựctiếpvàthay₫ổigiátrị₫ầura Có thể trả về con trỏ hoặcthamchiếuvào₫âu? — Vào biếntoàncục — Vào tham số truyền cho hàm qua ₫ịachỉ hoặcqua tham chiếu — Nói chung: vào vùng nhớ mà còn tiếptụctồntại sau khi kết thúc hàm Con trỏ lạiphứctạpthêmmột chút? 32 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Phảnvídụ: trả về con trỏ int* f(int* p, int n) { int Max = *p; int *p2 = p + n; while (p < p2) { if (*p > Max) Max = *p; ++p; } return &Max; } void main() { int s[5] = { 1, 2, 3, 4, 5}; int *p = FindMax(s,5); // get invalid address } 33 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Các ví dụ nghiên cứu: Đúng / sai? int* f1(int a) { return &a; } int& f2(int &a) { return a; } int f3(int &a) { return a; } int* f4(int *pa) { return pa; } int f5(int *pa) { return *pa; } int& f6(int *pa) { return *pa; } int& f7(int a) { return a; } int *pa; int* f8() { return pa; } 34 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện 3.4 Thiếtkế hàm và thư viện Viếtmộtchương trình chạytốt ₫ãkhó, viếtmộtthư việnhàmtốtcònkhóhơn! Mộtthư việnhàm₫ịnh nghĩa: —mộttậphợp các hàm (có liên quan theo mộtchủ₫ềchức năng) —những kiểudữ liệusử dụng trong các hàm —mộtsố biếntoàncục(rấthạnchế) Mộtthư việnhàmtốtcầnphải: —Thựchiệnnhững chứcnăng hữuích — Đơngiản, dễ sử dụng —Hiệusuấtvà₫ộ tin cậycao —Trọnvẹn, nhấtquánvà₫ồng bộ 35 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Thiếtkế hàm Phân tích yêu cầu: — Làm rõ các dữ kiện(₫ầuvào) vàkếtquả (₫ầura) — Tìm ra các chứcnăng cầnthựchiện Đặt tên hàm: ngắngọn, ý nghĩaxác₫áng, tự miêu tả —Hàmchỉ hành ₫ộng: Chọntênhàmlàmột ₫ộng từ kếthợpvớikiểu ₫ốitượng chủ thể, ví dụ printVector, displayMatrix, addComplex, sortEventQueue, filterAnalogSignal, — Hàm truy nhậpthuộc tính: Có thể chọnlà₫ộng từ hoặcdanhtừ kết hợpkiểu ₫ốitượng chủ thể, ví dụ length, size, numberOfColums, getMatrixElem, putShapeColor — Trong C++ nhiềuhàmcóthể giống tên (nạpchồng tên hàm), có thể chọntênngắn, ví dụ sort, print, display, add, putColor, getColor => nguyên tắc ₫a hình/₫axạ theo quan ₫iểmh ướng ₫ốitượng — Trong C++ còn có thể₫ịnh nghĩa hàm toán tử₫ểcó thể sử dụng các ký hiệutoántử₫ịnh nghĩasẵnnhư *, /, +, - thay cho lờigọihàm. . f7(int a) { return a; } int *pa; int* f8() { return pa; } 34 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện 3.4 Thiếtkế hàm và thư viện Viếtmộtchương trình chạytốt ₫ãkhó, viếtmộtthư việnhàmtốtcònkhóhơn! . dụng —Hiệusuấtvà₫ộ tin cậycao —Trọnvẹn, nhấtquánvà₫ồng bộ 35 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Thiếtkế hàm Phân tích yêu cầu: — Làm rõ các dữ kiện(₫ầuvào) vàkếtquả (₫ầura) — Tìm ra. viếtmộtthư việnhàmtốtcònkhóhơn! Mộtthư việnhàm₫ịnh nghĩa: —mộttậphợp các hàm (có liên quan theo mộtchủ₫ềchức năng) —những kiểudữ liệusử dụng trong các hàm —mộtsố biếntoàncục(rấthạnchế) Mộtthư việnhàmtốtcầnphải: —Thựchiệnnhững