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

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

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

Thông tin tài liệu

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

Mục lụ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ị

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan