Các hàm dịch chuyển (Override function)

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

- C++ cho phép lớp cơ sở và lớp dẫn xuất có thể cùng khai báo 2 hàm cùng tên thậm chí cùng đặc tính (cùng đặc tính đợc hiểu là cùng số lợng đối số, kiểu của đối số và cùng kiểu). Hai hàm nh vậy không phải là 2 hàm tải bội vì chúng không phải là hàm thành phần của cùng một lớp, nhng chúng lại thể hiện tính tơng ứng bội trong kế thừa.

- Một hàm đợc khai báo trong lớp dẫn xuất gọi là hàm dịch chuyển (Override function) từ một hàm trong lớp cơ sở nếu 2 hàm này cùng đặc tính. Sự định nghĩa lại các hàm nh vậy ở lớp dẫn xuất đợc gọi là gọi là sự "dịch chuyển" (Overriding). Ví dụ Class A { int x; public: A(int x1) {x=x1; }

void show() { cout << "show x = "<<x << endl; } void display() { cout << "display x = "<<x << endl; }

};

Class B: public A { int y;

public:

B(int x1,int y1):A(x1) {y=y1; }

void show() { cout << "y = "<<y << endl; } };

- Vấn đề đặt ra là khi đối tợng của lớp dẫn xuất sử dụng hàm dịch chuyển thì hàm đợc triệu gọi là thuộc lớp cơ sở hay lớp dẫn xuất ?

C++ quy định nh sau (Quy tắc 1)

+ Khi đối tợng của lớp dẫn xuất truy nhập tới hàm dịch chuyển thì mặc định là hàm của chính lớp dẫn xuất đó.

Ví dụ B b(10,20);

b.show() // gọi hàm của lớp B A::show() // gọi hàm của lớp A

+ Khi đối tợng của lớp cháu truy nhập tới hàm dịch chuyển của các lớp cơ sở phía trên (bản thân hàm này không có mặt trong lớp cháu) thì mặc định là hàm của lớp cơ sở khai báo sau cùng (gần lớp cháu nhất)

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

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

(174 trang)
w