1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu hàm và thư viện lập trình phần 10 ppt

5 238 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Cấu trúc

  • Kỹ thuật lập trìnhPhần II: Lập trình có cấu trúc

  • Nội dung chương 3

  • 3.1 Hàm và lập trình hướng hàm

  • Hàm là gì?

  • Ví dụ phân tích

  • Phương án 4 trong 1

  • Phương án phân hoạch hàm (1)

  • Phương án phân hoạch hàm (1)

  • Phương án phân hoạch hàm (1)

  • Phương án phân hoạch hàm (2)

  • Phương án phân hoạch hàm (2)

  • 3.2 Khai báo và định nghĩa hàm

  • Khai báo hàm và lời gọi hàm

  • Khai báo hàm C/C++ ở đâu?

  • Định nghĩa hàm ở đâu?

  • 3.3 Truyền tham số và trả về kết quả

  • Tham biến hình thức và tham số thực tế

  • 3.3.1 Truyền giá trị

  • Thử ví dụ đọc từ bàn phím

  • Truyền giá trị

  • 3.3.2 Truyền địa chỉ

  • Truyền mảng tham số?

  • Thử lại ví dụ đọc từ bàn phím

  • Khi nào sử dụng truyền địa chỉ?

  • 3.3.3 Truyền tham chiếu (C++)

  • Thử ví dụ hàm swap

  • Khi nào sử dụng truyền tham chiếu?

  • 3.3.4 Kiểu trả về

  • Cơ chế trả về

  • Trả về con trỏ

  • Lý do trả về con trỏ hoặc tham chiếu

  • Phản ví dụ: trả về con trỏ

  • Các ví dụ nghiên cứu: Đúng / sai?

  • 3.4 Thiết kế hàm và thư viện

  • Thiết kế hàm

  • Ví dụ minh họa: Tìm số nguyên tố

  • 3.5Thư viện chuẩn ANSI-C

  • 3.6Làm việc với tệp tin trong C++

  • Ví dụ: làm việc với tệp tin

  • 3.7Nạp chồng tên hàm trong C++

  • Ví dụ: định nghĩa các hàm max()

  • Ví dụ: sử dụng các hàm max()

  • Một số qui tắc về nạp chồng tên hàm

  • 3.8Hàm inline trong C++

  • Giải pháp hàm inline trong C++

  • Khi nào nên dùng hàm inline

  • Bài tập về nhà

Nội dung

46 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Ví dụ: sử dụng các hàm max() int max(int a, int b); // (1) double max(double a, double b); // (2) double max(double a, double b, double c); // (3) double max(double *seq, int n); // (4) void main() { int k = max(5,7); // call (1) double d = max(5.0,7.0);// call (2) double a[] = {1,2,3,4,5,6}; d = max(d, a[1], a[2]); // call (3) d = max(a, 5); // call (4) d = max(5,7); // ? d = max(d, 5); // ? } Â Đẩy trách nhiệmkiểmtravàtìmhàmphùhợpcho compiler! 47 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Mộtsố qui tắcvề nạpchồng tên hàm  Các hàm cùng tên ₫ược ₫ịnh nghĩacùngtrong mộtfile/ trongmộtthư viện hoặc sử dụng trong cùng mộtchương trình phảikhácnhauítnhấtvề: —Số lượng các tham số, hoặc —Kiểucủaítnhấtmộtthamsố (int khác short, const int khác int, int khác int&, ) Â Không thể chỉ khác nhau ở kiểutrả về  Tạisaovậy? — Compiler cầncócơ sở₫ểquyết ₫ịnh gọihàmnào —Dựa vào cú pháp trong lờigọi(số lượng và kiểucácthamsố thựctế) compiler sẽ chọn hàm có cú pháp phù hợpnhất —Khicần compiler có thể tự₫ộng chuyển ₫ổikiểu theo chiều hướng hợplýnhất (vd short=>int, int => double) 48 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện 3.8 Hàm inline trong C++  Vấn ₫ề: Hàm tiệndụng, nhưng nhiều khi hiệusuất không cao, ₫ặcbiệt khi mã thựcthihàmngắn —Cácthủ tụcnhư nhớ lạitrạng thái chương trình, cấpphátbộ nhớ ngănxếp, sao chép tham số, sao chép giá trị trả về, khôi phụctrạng thái chương trình mấtnhiềuthờigian —Nếumãthực thi hàm ngắnthìsự tiệndụng không bõ so vớisự lãng phí thờigian  GiảipháptrongC: Sử dụng macro, ví dụ #define max(a,b) a>b?a:b —Vấn ₫ề: Macro do tiềnxử lý chạy (preprocessor), không có kiểmtra kiểu, không có phân biệtngữ cảnh => gây ra các hiệu ứng phụ không mong muốn Ví dụ dòng lệnh l=max(k*5-2,l); sẽ₫ượcthaythế bằng l=k*5-2>k?k*5-2:l; // OOPS! —Những cách giảiquyếtnhư thêm dấungoặcchỉ làm mã khó ₫ọc, không khắcphụctriệt ₫ể các nhược ₫iểm 49 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Giảipháphàm inline trong C++  Điều duy nhấtcần làm là thêm từ khóa inline vào ₫ầudòngkhaibáovà₫ịnh nghĩahàm inline int max(int a, int b) { return (a > b)? a : b; }  Hàm inline khác gì hàm bình thường: — "Hàm inline" thựcchất không phảilàmộthàm! —Khigọihàmthìlờigọihàm₫ược thay thế một cách thông minh bởimãnguồn ₫ịnh nghĩahàm, không thựchiện các thủ tụcgọihàm Ví dụ: l=max(k*5-2,l); Đượcthaythế bằng các dòng lệnh kiểunhư: int x=k*5-2; // biếntạm trung gian l=(x>l)?x:l; // OK 50 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Khi nào nên dùng hàm inline  Ưu ₫iểmcủahàminline: —Tiệndụng như hàm bình thường —Hiệusuấtnhư viếtthẳng mã, không gọihàm —Tin cậy, an toàn hơnnhiềuso vớisử dụng Macro  Nhược ₫iểmcủa hàm inline: —Nếugọi hàm nhiềulầntrongchương trình, mã chương trình có thể lớnlênnhiều(mãthựchiệnhàmxuấthiệnnhiềulần trong chương trình) —Mã₫ịnh nghĩahàmphải ₫ể mở => ₫ưa trong header file  Lựachọnxâydựng và sử dụng hàm inline khi: —Mã₫ịnh nghĩahàmnhỏ (một vài dòng lệnh, không chứa vòng lặp) —Yêucầuvề tốc ₫ộ ₫ặtratrước dung lượng bộ nhớ . nhiệmkiểmtravàtìmhàmphùhợpcho compiler! 47 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Mộtsố qui tắcvề nạpchồng tên hàm  Các hàm cùng tên ₫ược ₫ịnh nghĩacùngtrong mộtfile/ trongmộtthư viện hoặc. 3: Hàm và thư viện Giảipháphàm inline trong C++  Điều duy nhấtcần làm là thêm từ khóa inline vào ₫ầudòngkhaibáovà₫ịnh nghĩahàm inline int max(int a, int b) { return (a > b)? a : b; }  Hàm. 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Khi nào nên dùng hàm inline  Ưu ₫iểmcủahàminline: —Tiệndụng như hàm bình thư ng —Hiệusuấtnhư viếtthẳng mã, không gọihàm —Tin cậy, an toàn hơnnhiềuso

Ngày đăng: 31/07/2014, 04:20