Bài giảng Lập trình hướng đối tượng trong C++ - Phạm Thị Quỳnh - Chương 4: Đối tượng và lớp (Phần 5)
Overload một phương thức, tức là tạo ra nhiều phương thức có cùng tên nhưng khác nhau về danh sách tham số
Overrid một phương thức, tức là tạo ra một phương thức trong lớp dẫn xuất có cùng prototype với một phương thức trong lớp cơ sở.
CHƯƠNG 4: ĐỐI TƯỢNG & LỚP (V) ĐA HÌNH (Polymorphism) Đa hình Đa hình là một hàm có nhiều hình thức thể hiện khác nhau tùy từng hoàn cảnh cụ thể Đa hình là một đặc trưng của ngôn ngữ lập trình hướng đối tượng Phân loại: Đa hình tĩnh Đa hình động 1. Đa hình tĩnh Overload một phương thức, tức là tạo ra nhiều phương thức có cùng tên nhưng khác nhau về danh sách tham số Overrid một phương thức, tức là tạo ra một phương thức trong lớp dẫn xuất có cùng prototype với một phương thức trong lớp cơ sở. Ví dụ: Overloading Function class Mammal { public: void Move() {cout class base { public: void a() { cout f; Kết quả: f của lớp Parent sẽ được viện dẫn Nếu f được khai báo là hàm ảo trong lớp Parent thì f của lớp Child sẽ được viện dẫn. Ví dụ: Không sử dụng hàm ảo class Mammal { public: void Move() {cout Move(); // “Mammal moves 1 step” } Ví dụ: Sử dụng hàm ảo class Mammal { public: void virtual Move() {cout Move(); // “Dog moves 1 step” } Hàm thuần ảo Nếu khai báo hàm ảo như sau: virtual void send_it(void) = 0; “=0” có nghĩa là hàm thuần ảo (pure virtual function). Tức là, nó sẽ không được gọi một cách trực tiếp. Hàm thuần ảo phải được overload trong subclass Hàm ảo có thể được overload trong subclass 3. Lớp trừu tượng (abstract class) Hàm thuần ảo được khai báo trong lớp sẽ làm cho lớp đó trở thành lớp cơ sở trừu tượng. Lớp cơ sở trừu tượng là lớp cơ sở không có đối tượng nào và chỉ sử dụng để cho các lớp khác kế thừa. Một lớp chỉ đóng vai trò là lớp cơ sở cho các lớp khác và không có đối tượng cụ thể của nó được tạo ra thì gọi là lớp trừu tượng. Ví dụ: hàm thuần ảo class Mammal { public: virtual void Move() = 0; }; class Dog : public Mammal { public: void Move() {cout << "Dog moves 1 step";} }; void main() { Dog p; p.Move(); // “Dog moves 1 step” Mammal m; // ”Lỗi” m.Move(); } 4. Lớp cơ sở ảo Lớp B sẽ có hai bản sao của tất cả các thành phần từ lớp X. Khi gọi đến một trong những thành phần này từ lớp B, chương trình dịch sẽ thông báo lỗi. Nhập nhằng trong đa kế thừa Giải quyết xung đột Gọi tường minh Ví dụ lớp X có phương thức x được thừa kế Lời gọi x từ một đối tượng của lớp B B b; b.A1 :: x; b.A2 :: x; Sử dụng lớp cơ sở ảo Lớp cơ sở ảo Lớp cơ sở ảo đảm bảo trong lớp dẫn xuất chỉ tạo ra một bản sao của các thành phần được thừa kế từ lớp cơ sở. Lớp cơ sở ảo Hàm tạo của lớp cơ sở chỉ được gọi trong hàm tạo của lớp dẫn xuất trực tiếp từ nó. Hàm tạo của lớp cơ sở ảo thì được gọi ở tất cả các lớp dẫn xuất nó. Quy tắc như sau: Hàm tạo của lớp cơ sở ảo được gọi đầu tiên Tiếp theo đó là hàm tạo của các lớp dẫn xuất trực tiếp …
File đính kèm:
- Bài giảng Lập trình hướng đối tượng trong C++ - Phạm Thị Quỳnh - Chương 4 Đối tượng và lớp (Phần 5).ppt