30/09/2018, 18:46
Tính đa hình trong C++
Mình vừa học đến kế thừa và đa hình của OOP. Cho mình hỏi
Tại sao khi một lớp A kế thừa từ lớp Base. Khi khởi tạo đối tượng lại dùng còn trỏ Base obj để new một đối tượng A thay vì dùng trực tiếp A* obj = new A();
A cũng đã kế thừa đầy đủ từ lớp Base rồi mà?
Bài liên quan
Đương nhiên bạn làm vậy cũng được. Nó chỉ cần thiết khi bạn sử dụng tính “đa hình” của hướng đối tượng.
Lấy ví dụ thế này chẳng hạn. Bạn có một lớp là MayTinh. Ở trong MayTinh có một đối tượng là ManHinh, có nhiều lớp màn hình khác nhau, ví dụ ManHinhCRT, ManHinhLCD.
Bạn sẽ khai báo đối tượng ManHinh như thế nào cho hợp lý?Một giải pháp có thể là tạo thêm hai lớp MayTinhLCD và MayTinhCRT. Nhưng trong tương lai, nếu bạn muốn đổi từ ManHinhCRT sang ManHinhLCD nhưng vẫn giữ nguyên các thành phần khác thì bạn cần làm thế nào? Và giả sử đến một lúc có ManHinhLED, bạn lại cần tạo một lớp MayTinhLED nữa chăng?
Lúc này tính đa hình của OOP phát huy tác dụng. “Tính đa hình cho phép một đối tượng có thể mang nhiều “dạng” khác nhau”. Với việc khai báo một lớp cha là ManHinh, bạn sẽ dễ dàng thay đổi “loại” màn hình khác nhau, tái sử dụng code và đảm bảo tính hợp lý của thiết kế.
v.v… Đây chỉ là ví dụ thôi, thực tế thì nó được sử dụng rất nhiều trong các mẫu thiết kế. Việc khai báo Base chứ ko phải là A nó còn sử dụng trong nhiều trường hợp / mục đích khác nữa. Tuy nhiên không phải lúc nào ta cũng khai báo như vậy.