Khoanglang89
Bạn hãy đăng nhập hoặc đăng ký
Khoanglang89

NHẬN THIẾT KẾ WEBSITE/ SOFTWARE - LÀM ĐỒ ÁN TỐT NGHIỆP, ĐỒ ÁN CHUYÊN MÔN NGÀNH CÔNG NGHỆ THÔNG TIN


You are not connected. Please login or register

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

1 Lớp và đối tượng – Phần 8 on Fri Nov 02, 2012 12:57 pm

LostSoul89

avatar

Admin
Admin
Loading
Lớp và đối tượng – Phần 8






Một
số mở rộng của C++ đối với C đã được trình bày trong các chương trước
như biến tham chiếu, định nghĩa chồng hàm, hàm với đối mặc định … Phần
này ta xem một đặc trưng khác của C++ được gọi là hàm trực tuyến
(inline).















Đến trang:
Trước: 1 2 Kế



5.4/- Ví dụ

Phần này chúng tôi trình bày một ví dụ tương đối hoàn chỉnh về lớp các hình tròn trong chế độ đồ họa. Chương trình gồm:

- Lớp HT (hình tròn) với các thuộc tính:




- Các phương thức

+ Hàm tạo không đối thực hiện việc gán giá trị bằng 0 cho các thuộc tính của lớp. HT();

+ Hàm tạo có đối. HT(int n, int m1 = 15);

Thực hiện các việc:

Gán r1 cho r, m1 cho m

Cấp phát bộ nhớ cho pht

Vẽ hình tròn và lưu ảnh hình tròn vào vùng nhớ của pht

- Hàm hủy: ~HT();

Thực hiện các việc:

Xoá hình tròn khỏi màn hình (nếu đang hiển thị)

Giải phóng bộ nhớ đã cấp cho pht

+ Phương thức: void hien(int x, int y);

Có nhiệm vụ hiển thị hình tròn tại (x, y)

+ Phương thức : void an()

Có nhiệm vụ làm ẩn hình tròn

- Các hàm độc lập:




Nội dung chương trình là tạo ra các chuyển động xuống và lên của các hình tròn.



















Các nhận xét:

- Trong thân hàm hủy gọi tới phương thức an().

- Điều gì xẩy ra khi bỏ đi hàm hủy:

♦ Khi gọi hàm ht_di_dong_xuong() thì có 2 đối tượng kiểu HT được tạo
ra. Trong thân hàm sử dụng các đối tượng này để vẽ các hình tròn di
chuyển xuống. Khi thoát khỏi hàm thì 2 đối tượng (tạo ra ở trên) được
giải phóng. Vùng nhớ của các thuộc tính của chúng bị thu hồi, nhưng vùng
nhớ cấp phát cho thuộc tính pht chưa được giải phóng và ảnh của 2 hình
tròn (ở phía dưới màn hình) vẫn không được cất đi.

♦ Điều tương tự xẩy ra sau khi ra khỏi hàm ht_di_dong_len(): vùng nhớ
cấp phát cho thuộc tính pht chưa được giải phóng và ảnh của 2 hình tròn
(ở phía trên màn hình) vẫn không được thu dọn.

Xem lý lịch thành viên http://khoanglang89.forumvi.com

2 Re: Lớp và đối tượng – Phần 8 on Fri Nov 02, 2012 12:58 pm

LostSoul89

avatar

Admin
Admin
Loading
6/- Các hàm trực tuyến (Inline)
Một số mở rộng của C++ đối với C đã được trình bày trong các chương
trước như biến tham chiếu, định nghĩa chồng hàm, hàm với đối mặc định …
Phần này ta xem một đặc trưng khác của C++ được gọi là hàm trực tuyến
(inline).

6.1/- Ưu nhược điểm của hàm

Việc tổ chức chương trình thành các hàm có 2 ưu điểm rõ rệt:

Thứ nhất là chia chương trình thành các đơn vị độc lập, làm cho
chương trình được tổ chức một cách khoa học dễ kiểm soát, dễ phát hiện
lỗi, dễ phát triển và mở rộng.

Thứ hai là giảm được kích thước chương trình, vì mỗi đoạn chương
trình thực hiện nhiệm vụ của hàm được thay bằng một lời gọi hàm.

Tuy nhiên hàm cũng có nhược điểm là làm chậm tốc độ chương trình do
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 đốivà 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ác hàm trực tuyến trong C++ có khả năng khắc phục được các nhược điểm nói trên.

6.2/- Các hàm trực tuyến

Để biến một hàm thành trực tuyến ta viết thêm từ khoá inline vào
trước khai báo nguyên mẫu hàm. Nếu không dùng nguyên mẫu thì viết từ
khoá này trước dòng đầu tiên của định nghĩa hàm.

Ví dụ :




hoặc




Chú ý: Trong mọi trường họp, từ khoá 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 trực tuyến vì từ khoá inline viết sau lời gọi hàm:




Chú ý: Trong C++, nếu hàm được xây dựng sau lời gọi hàm thì
bắt buộc phải khai báo nguyên mẫu hàm trước lời gọi. Trong ví dụ trên,
trình biên dịch C++ sẽ bắt lỗi vì thiếu khai báo nguyên ngẫu hàm f .

6.3/- Các biên dịch và dùng hàm trực tuyến

Chương trình dịch xử lý các hàm inline như các macro (được định nghĩa
trong lệnh #define), nghĩa là nó sẽ thay mỗi lời gọi hàm bằng một đoạn
chương trình thực hiện nhiệm vụ của hàm. Cách này làm cho chương trình
dài ra, nhưng tốc độ chương trình tăng lên 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.

Phương án dùng hàm trực tuyến rút ngắn được thời gian chạy máy nhưng
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
trực tuyến có nhiều câu lệnh). Vì vậy chỉ nên dùng phương án trực tuyến
đối với các hàm nhỏ.

6.4/- Sự hạn chế của trình biên dịch

Không phải khi gặp từ khoá inline là trình biên dịch nhất thiết phải xử lý hàm theo kiểu trực tuyến.

Có một số hàm mà các trình biên dịch thường không xử lý theo cách
inline như các hàm chứa biến static, hàm chứa các lệnh chu trình hoặc
lệnh goto hoặc lệnh switch, hàm đệ quy. Trong trường hợp này từ khoá
inline lẽ dĩ nhiên bị bỏ qua.

Thậm chí từ khoá inline vẫn bị bỏ qua ngay cả đối với các hàm không
có những hạn chế nêu trên nếu như trình biên dịch thấy cần thiết (ví dụ
đã có quá nhiều hàm inline làm cho bộ nhớ chương trình quá lớn)

Ví dụ :Chương trình sau sử dụng hàm inline tính chu vi và diện tích của hình chữ nhật:

Cách 1: Không khai báo nguyên mẫu. Khi đó hàm dtcvhcn phải đặt trước hàm main.







Cách 2: Sử dụng khai báo nguyên mẫu. Khi đó từ khoá inline đặt trước nguyên mẫu.

Chú ý: Không được đặt inline trước định nghĩa hàm. Trong
chương trình dưới đây nếu đặt inline trước định nghĩa hàm thì hậu quả
như sau: Chương trình vẫn dịch thông, nhưng khi chạy thì chương trình bị
quẩn và không thoát đi được.







Hết phần 8

Xem lý lịch thành viên http://khoanglang89.forumvi.com

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Bài viết mới cùng chuyên mục

    Bài viết liên quan vớiLớp và đối tượng – Phần 8

      Permissions in this forum:
      Bạn không có quyền trả lời bài viết