BÀI TỐN XỬ LÝ ĐA HÌNH

Một phần của tài liệu Lập trình hướng đối tượng (Trang 86 - 88)

CHƢƠNG 4 XỬ LÝ ĐA HÌNH

1. BÀI TỐN XỬ LÝ ĐA HÌNH

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 86 Trong ví dụ trên lớp C kế thừa từ lớp B, lớp B lại kế thừa từ lớp A và cả 3 lớp này đều cĩ cùng phƣơng thức print(). Giả sử tại hàm main() chúng ta gọi phƣơng thức print() cho đối tƣợng c của lớp C. Mặc định trình biên dịch sẽ gọi phƣơng thức print() đƣợc khai báo trong lớp C. Cịn nếu muốn gọi đến phƣơng thức print() của lớp B và A chúng ta cần cĩ tốn tử phạm vi ::. Nhƣ vậy đối tƣợng của lớp nào sẽ ƣu tiên gọi phƣơng thức của lớp đĩ nếu trong quan hệ gia phả cĩ các phƣơng thức trùng tên.

Giả sử bây giờ lời gọi phƣơng thức print() khơng phải là từ một đối tƣợng nhƣ trên mà là một con trỏ đối tƣợng nhƣ hình sau:

Bây giờ lời gọi phƣơng thức print() lại xuất phát từ một con trỏ đối tƣợng. Tại hàm main(), chúng ta khai báo ba con trỏ đối tƣợng của lớp A và ba đối tƣợng thuộc lớp A, B, C. Lƣu ý một điều là một con trỏ của lớp cơ sở cĩ thể chứa địa chỉ của một đối tƣợng lớp dẫn xuất hay nĩi cách khác con trỏ lớp cơ sở cĩ thể trỏ tới một đối tƣợng của lớp dẫn xuất. Do đĩ chúng ta cĩ thể lần lƣợt cho ba con trỏ p, q, r của lớp

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 87 cơ sở A trỏ đến ba đối tƣợng a, b, c của ba lớp A, B, C. Sử dụng ba con trỏ này gọi đến phƣơng thức print() với mong muốn là con trỏ đang quản lý đối tƣợng nào thì phƣơng thức của lớp đĩ sẽ đƣợc gọi. Nhƣng cuối cùng kết quả thu đƣợc là đều gọi đến ba phƣơng thức print() của lớp A.

Phƣơng thức print() nhƣ hai ví dụ trên là phƣơng thức thơng thƣờng và đƣợc gọi là phƣơng thức tĩnh. Từ hai ví dụ trên chúng ta cĩ thể kết luận những điều sau đây:

Lời gọi đ n ph ng thức tĩnh

 Nếu lời gọi phƣơng thức xuất phát từ đối tƣợng của lớp nào thì phƣơng thức của lớp đĩ sẽ đƣợc gọi.

 Nếu lời gọi phƣơng thức xuất phát từ một con trỏ đối tƣợng của lớp nào thì phƣơng thức của lớp đĩ sec đƣợc gọi, bất kể con trỏ đĩ đang trỏ đến một đối tƣợng của lớp khác.

Vấn đề đặt ra là làm sao để ba lời gọi pprint(), qprint() và rprint() ở ví dụ trên cĩ thể gọi đến ba phƣơng thức tƣơng ứng trong ba lớp. Tức là chúng ta mong muốn con trỏ đang quản lý đối tƣợng nào thì nĩ phải gọi phƣơng thức của đối tƣợng đĩ.

Để giải quyết vấn đề chúng ta cần sử dụng hai yếu tố sau:

- Khả năng định nghĩa đè phƣơng thức (phƣơng thức ảo) - Con trỏ lớp cơ sở cĩ thể trỏ đến đối tƣợng lớp dẫn xuất

Một phần của tài liệu Lập trình hướng đối tượng (Trang 86 - 88)

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

(111 trang)