Các hàm nội tuyến (inline)

Một phần của tài liệu Giáo trình hướng dẫn kỹ năng sử dụng MS excel 2k3 (Trang 26 - 29)

Việc tổ chức chơng trình thành các hàm có u điểm chơng trình đợc chia thành các đơn vị độc lập, điều này giảm đợc kích thớc chơng trình, vì mỗi đoạn chong trình thực hiện nhiệm vụ của hàm đợc thay bằng lời gọi hàm. Tuy nhiên hàm cũng có nhợc điểm là làm là chậm tốc độ thực hiện chơng trình vì phải thực hiện một số thao tác có tính thủ tục mỗi khi gọi hàm nh: cấp phát vùng nhớ cho các đối số và biến cục bộ, truyền dữ liệu của các tham số cho các đối, giải phóng vùng nhớ trớc khi thoát khỏi hàm.

C++ cho khả năng khắc phục đợc nhợc điểm nói trên bằng cách dùng hàm nội tuyến. Để biến một hàm thành hàm nội tuyến ta viết thêm từ khóa inline vào trớc khai báo nguyên mẫu hàm.

Chú ý: Trong mọi trờng hợp, từ khóa inline phải xuất hiện trớc các lời gọi hàm

thì trình biên dịch mới biết cần xử lý hàm theo kiểu inline.

Ví dụ hàm f() trong chơng trình sau sẽ không phải là hàm nội tuyến vì inline viết sau lời gọi hàm.

Ví dụ 2.13 #include <iostream.h> #include <conio.h> void main() { int s ;

s=f(5,6); cout<<s; getch(); }

inline int f(int a,int b) {

return a*b; }

Chú ý:

Chơng trình dịch các hàm inline nh tơng tự nh các macro, nghĩa là nó sẽ thay đổi lời gọi hàm bằng một đoạn chơng trình thực hiện nhiệm vụ hàm. Cách làm này sẽ tăng tốc độ chơng trình do không phải thực hiện các thao tác có tính thủ tục khi gọi hàm nhng lại làm tăng khối lợng bộ nhớ chơng trình (nhất là đối với các hàm nội tuyến có nhiều câu lệnh). Vì vậy chỉ nên dùng hàm inline đối với các hàm có nội dung đơn giản.

Không phải khi gặp từ khoá inline là chơng trình dịch nhất thiết phải xử lý hàm theo kiểu nội tuyến. Từ khoá inline chỉ là một từ khoá gợi ý cho chơng trình dịch chứ không phải là một mệnh lệnh bắt buộc.

Ví dụ 2.14 Chong trình sau sử dụng hàm inline để tính chu vi và diện tích hình

chữ nhật.

#include <iostream.h> #include <conio.h>

inline void dtcvhcn(int a,int b,int &dt,int &cv) { dt=a*b; cv=2*(a+b); } void main() { int a[20],b[20],cv[20],dt[20],n; cout<<"\n So hinh chu nhat"; cin>>n;

for(int i=0;i<n;++i) {

cout<<"\n Nhap 2 canh cua hinh chu nhat"<<i<<":"; cin>>a[i]>>b[i];

dtcvhcn(a[i],b[i],dt[i],cv[i]); }

clrscr();

for(i=0;i<n;++i) {

cout<<"\n Hinh chu nhat thu "<<i+1<<":";

cout<<"\n Do dai hai canh "<<a[i]<<"va"<<b[i]; cout<<"\n dien tich "<<dt[i];

cout<<"\n chu vi "<<cv[i]; }

getch(); }

Ví dụ 2.15 Một cách viết khác của chơng trình trong ví dụ 2.14

#include <iostream.h> #include <conio.h>

inline void dtcvhcn(int a,int b,int &dt,int &cv); void main()

{

int a[20],b[20],cv[20],dt[20],n; cout<<"\n So hinh chu nhat"; cin>>n;

for(int i=0;i<n;++i) {

cout<<"\n Nhap 2 canh cua hinh chu nhat"<<i<<":"; cin>>a[i]>>b[i]; dtcvhcn(a[i],b[i],dt[i],cv[i]); } clrscr(); for(i=0;i<n;++i) {

cout<<"\n Hinh chu nhat thu "<<i+1<<":";

cout<<"\n Do dai hai canh "<<a[i]<<"va"<<b[i]; cout<<"\n dien tich "<<dt[i];

cout<<"\n chu vi "<<cv[i]; }

getch(); }

void dtcvhcn(int a,int b,int &dt ,int &cv) {

dt=a*b;

cv=2*(a+b); }

Một phần của tài liệu Giáo trình hướng dẫn kỹ năng sử dụng MS excel 2k3 (Trang 26 - 29)

Tải bản đầy đủ (DOC)

(142 trang)
w